c语言怎样通过函数调用实现选择排序法?
c语言通过函数调用实现选择排序法:
1、写一个简单选择排序法的函数名,包含参数。int SelectSort(int * ListData,int ListLength);
2、写两个循环,在循环中应用简单选择插入排序:
int SelectSort(int * ListData,int ListLength)
{
int i , j ;
int length = ListLength;
for(i=0;i<=length-2;i++)
{
int k = i;
for(j=i+1;j<=length-1;j++)
{
if(ListData[k]>ListData[j])
{
k=j;
}
}
if(k!=i)
{
int tmp = ListData[i];
ListData[i] = ListData[k];
ListData[k] = tmp;
}
}
return 0;
}
3、对编好的程序进行测试,得出测试结果:
int main()
{
int TestData[5] = {34,15,6,89,67};
int i = 0;
printf(“排序之前的结果n”);
for(i = 0;i<5;i++)
printf(“|%d|”,TestData[i]);
int retData = SelectSort(TestData,5);
printf(“排序之后的结果:n”);
for(i = 0;i<5;i++)
printf(“|%d|”,TestData[i]);
return 0;
}
4、简单选择排序中,需要移动的记录次数比较少,主要的时间消耗在对于数据的比较次数。基本上,在比较的时候,消耗的时间复杂度为:n*n。
简述冒泡排序与选择排序的区别?
区别如下
1.冒泡排序是比较相邻位置的两个数,而选择排序是按顺序比较,找最大值或者最小值;
2.冒泡排序每一轮比较后,位置不对都需要换位置,选择排序每一轮比较都只需要换一次位置;
3.冒泡排序是通过数去找位置,选择排序是给定位置去找数;
VB冒泡排序法和选择排序法的优缺点比较
- 就是两种排序法的区别和优劣,要详细一点,跪求
- 是写论文还是程序?
c语言的选择排序法 我在devc++里编的。我现在该怎么修改。
- #include "stdio.h" void sort(int a[],int n) {int i,j,k,t; for(i=0;in-1;i++) {k=i; for(i=j+1;jn;j++) if(a[j]a[k]) k=j; t=a[k]; a[k]=a[i]; a[i]=t; } } main() {int a[10],i; printf("please input 10 numbers:n&quo粻钉纲固蕺改告爽梗鲸t;); for(i=0;i10;i++) scanf("%d",&a[i]); printf("the sorted numbers are:n"); sort(int a[10],10); for(i=0;i10;i++) printf("%d ",&a[i]); }最后就说我有错误F:Dev-Cpp源代码选择排序.cppIn function int main():208F:Dev-Cpp源代码选择排序.cpp[Error] expected primary-expression before int
- sort(int a[10],10);改为 sort( a,10);
直接插入排序、二分法插入排序、希尔排序、直接选择排序、堆排序、交换排序、快速排序英文怎么说?
- 直接插入排序:Straight Insertion Sortbr二分法插入排序: Bi怠胆糙感孬啡茬拾长浆nary Sortbr希尔排序:Shell Sortbr直接选择排序:Straight Select Sortbr堆排序:Heap Sortbr交换排序:Swap Sortbr快速排序:Quick Sortbr基数排序:Radix Sortbr归并排序:Merge sort
请问为何这个程序实现不了选择法排序?感激不尽!O(∩_∩)O谢谢!
- #includestdio.hint main(){ int i,a[15],max,j,t,n=15; printf("Please input the numbers :n"); for(i=0;i15;i++) {printf("a[%d]=",i); scanf("%d",&a[i]);} printf("nThe entered numbers:n"); for(i=0;i15;i++) printf("%5d",a[i]); for(i=0;in-1;i++) { max=a[i]; for(j=0;jn;j++) if(a[j]max){t=j;max=a[j];} a[t]=a[i]; a[i]=max; } printf("nThe sorted numbers:n"); for(i=0;i15;i++) printf("%5d",a[i]); return 0;}问题补充: 这个程序没有实现排序,运行的结果是一组没有规律的输出。
- for(i=0;in-1;i++) { max=a[i];t=i;这是给你加上的for(j=i+1*这里循环初值改了*;jn;j++)if(a[j]max){t=j;max=a[j];} a[t]=a[i]; a[i]=max; }看看这样行不
严蔚敏版本的 数据结构中 的二叉排序树中 删除节点 时 重接 Q的左右子树 的方法为何 有选择语句?
- 就是这张图片中下面画线的部分,为什么要用一个if else选择呢?
- 因为有可能该删除的节点下面的左子树没有右子树的情况。如下(其中O是待删除的节点,O 下面有左右子树L、R,但L下面没有右子树,这种情况下,直接把L的左子树,也就是A提上来即可)——————–根—————————————O——-X——————————–L——-R——————A
请大神帮我改一下程序,请问选择法排序本身是不是有bug?
- #include string.h#include math.h#include stdlib.h#include stdio.hint main (){int i,j[5],m,n,k;char a[10]="awerty";char b[10]="qwretu";char c[10]="qdwiacn";char d[10]="qda";char e[10]="qucw";char *p,*f[5]={a,b,c,d,e};for(i=0;i5;i++){printf("%d:%sn",i+1,*(f+i));}printf("n");for(i=0;i5;i++){j[i]=strlen(*(f+i));}for(i=0;i5;i++)printf("%d",j[i]);printf("n");for(m=0;m4;m++){k=m;for(n=m+1;n5;n++)if(j[m]j[n])k=n;i=j[m];j[m]=j[k];j[k]=i;p=*(f+m);*(f+m)=*(f+k);*(f+k)=p;}for(i=0;i5;i++)printf("%d",j[i]);printf("nn");for(i=0;i5;i++){printf("%d:%sn",i+1,*(f+i));}printf("n");return 0;}问题补充:
- *1:awerty2:qwretu3:qdwiacn4:qda5:qucw6 6 7 3 41:aertwy2:eqrtuw3:acdinqw4:adq5:cquwPress any key to continue*#include string.h#include math.h#include stdlib.h#include stdio.hint main () {int i,j[5],m,n,k;char a[10] = "awerty";char b[10] = "qwretu";char c[10] = "qdwiacn";char d[10] = "qda";char e[10] = "qucw";char ch,*f[5] = {a,b,c,d,e};for(i = 0;i 5;i++) {printf("%d:%sn",i + 1,*(f + i));}printf("n");for(i = 0;i 5;i++) {j[i] = strlen(*(f + i));}for(i = 0;i 5;i++)printf("%d ",j[i]);printf("n");for(i = 0; i 5; ++i) { 对5个数组都进行排序for(m = 0;m j[i] – 1;m++) {k = m;for(n = m + 1;n j[i];n++)if(f[i][k] f[i][n]) k = n;if(k != m) {ch = f[i][k];f[i][k] = f[i][m];f[i][m] = ch;}}}for(i = 0;i 5;i++) printf("%d ",j[i]);printf("nn");for(i = 0;i 5;i++) {printf("%d:%sn",i + 1,*(f + i));}printf("n");return 0;}
菜鸟求救,c语言求解???选择法从小到大排序
- #include iostreamusing namespace std;int main(){int a[10];int i;void sort(int a[],int n);cout"input 10 numbers:";for(i=0;i10;i++)cina[10];sort(a,10);for(i=0;i10;i++)couta[i] ;coutendl;return 0;}void sort(int a[],int n){int i,j,c;for(i=0;in-1;i++)for(j=i+1;jn;j++){if(a[i]a[j])c=a[i]; a[i]=a[j];a[j]=c;}}
- 你这个是要用C语言的语法来?
c语言的一个和选择排序法有关的问题
- 选择排序法为什么不能直接简化为下面这段程序?for(i=0;in-1,i++){for(j=i+1;jn;j++)if(b[i]b[j]){t=b[i];b[i]=b[j];b[j]=t;}
- 你这个根本就不是选择排序,而是冒泡排序!
C语言选择排序法 问题
- #include "Stdio.h"void main(){ void sa(int array[],int n); int array[10],i; printf("enter the array:n"); for(i=0;i10;i++) scanf("%d",&array[i]); sa(array,10); printf("the sorted array:n"); for(i=0;i10;i++) printf("%dt",array[i]); getch();}void sa(int array[],int n){ int i,j,k,temp; for(i=0;i10;i++) { k=i; for(j=i+1;jn;j++) if(array[j]array[k]) k=j; temp=array[k]; array[k]=array[i]; array[i]=temp; }}以下是我的理解逻辑不知道错在哪里?是变量k的值理解错了吗?请高手详细通俗指点迷津假如array[0]=35,array[1]=8,array[2]=9,array[3]=2,array[4]=-5,array[5]=-1,array[6]=10,array[7]=6,array[8]=62,array[9]=30第一轮比较即执行第一个for循环i=0时第二个for循环的第一次循环情况是此时j=1,k=i=0即if(array[1]array[0])即835 即真则执行k=j;此时k=1,i=0(第一个for循环i=0时)接着交换数组元素即array[0]=8,array[1]=35第二个for循环的第二次循环情况是此时j=2,k=1(没有跳出第二个for循环k的值不会被释放吧?即使释放k的值也不可能为k=i=0?)即if(array[2]array[1])即935 即真则执行k=j;此时k=2,i=0(第一个for循环i=0时)接着交换数组元素即array[0]=9,array[2]=8此时数组元素值已改变即array[0]=9,array[1]=35,array[2]=8,array[3]=2,array[4]=-5,array[5]=-1,array[6]=10,array[7]=6,array[8]=62,array[9]=30 此逻辑推出的结果为:array[0]=-1,array[1]=35,array[2]=8,array[3]=9,array[4]=2,array[5]=-5,array[6]=10,array[7]=6,array[8]=62,array[9]=30array[5]=-5没有排到首位明显出错了
- if(array[j]array[k])k=j; if(k!=j) { temp=array[k]; array[k]=array[i]; array[i]=temp; }个中滋味自己体会
C语言的选择排序法应该怎么用?
- 编一个把三个数排序的程序,要求用数组的形式和选择排序法,谢谢
- void main(){int a[3]={5,3,4};int k=0,s=0,pos=0,temp=0;for(k=0;k2;k++){ pos=k; for(s=k+1;s3;s++) { if(a[pos]a[s]) { pos=s; } } if(pos!=k) { temp=a[k]; a[k]=a[pos]; a[pos]=temp; } }}