首页 > 编程知识 正文

c语言冒泡排序法代码,excel函数序号排序

时间:2023-05-03 12:54:26 阅读:55620 作者:3142

按2-6-5函数的选择法排序(25分) ) )。

在这个问题中,需要实现用选择法对整数数组进行简单排序的函数。

函数接口定义:

语音软件(int n )、int n );

这里,a是排序对象的数组,n是数组a的元素的个数。 此函数按选择方法按升序排列数组a中的元素,结果仍为数组a。

审判程序范例: # include stdio.h # define maxn 10 void sort (inta [ ],int n ); int main () { int i,n; int a[MAXN]; scanf('%d ',n ); for(I=0; in; I ) scanf('%d ',a[i]; sort(a,n ); 打印机(aftersortedthearrayis : ); for(I=0; i n; I ) printf('%d ',a[i]; printf((n ); 返回0; (/)您的代码将嵌入此处() /输入示例:

4 5 1 7 6

输出示例:

After sorted the array is: 1 5 6 7

老师的回答:

voidsort(inta[],int n ) {for ) intI=0; i n; I ) {int minPosition=i; for(intj=I1; j n; j () if ) a[j]a[minposition] ) minPosition=j; (if )最小位置!=I({inttemp=a[I]; a[i]=a[minPosition]; a[minPosition]=temp; }}谢谢你知道回答者有这么好的答案。 让我们了解了选择法的排序和鼓泡法的排序。

上图直观地表示了鼓泡法的序列。 我对鼓泡法的理解是,相邻的两个数、两个两个比较是,把小的放在前面,把大的放在后面,从头到尾循环多次,最后就能实现整个排列的升序。 当n个数字排序时,通过进行n-1次各内层的比较就可以遍历该n个数字,外层循环最多n-1次,一定可以完成排序。

代码实现:

for(intI=0; i 5; I ) for(intI=0; i 5; I () { int t; if(a ) I ) a ) I1 ) ) t=a(I ); a[i]=a[i 1]; a[i 1]=t; }}我学习了我认识的回答者的说明,但是我的代码做了额外的操作。 比较鼓泡法的相邻数量,将较大的放在后面,较小的放在前面。 这样按顺序比较可以将最大数量排列在最后一位,这样下一次扫描就不用再将最后一个数量与倒数第二个数字进行比较了。 这样,每次扫描的比较次数依次减少,不需要每次扫描进行n-1次比较。

for(intj=0; j 5; j ) for(intI=0; i 5-j; I () { int t; if(a ) I ) a ) I1 ) ) t=a(I ); a[i]=a[i 1]; a[i 1]=t; } }

上图直观地显示了选择法的排序。 我对选择方法的理解是把第一个位置的数字和之后的每个数字进行比较,找到最小的,然后把它和第一个位置的数字交换位置。 这样,通过在之后的每次扫描中将第2小的数字、第3小的数字置于第3个个数的位置,在第n-1个小的个数到达该位置时,第n个个数当然为最大的个数,所以外层扫描仅n-1次为n-1个个数。 另一方面,第一次内层比较是第一次数和之后的数的比较,比较n-1次,第二次是第二次数和之后的数的比较,比较n-2次,依次类推。

代码实现:

for(intI=0; i 4; I ) for(j=I1,k=i; j 5; j () if ) a[k]a[j] )/I不随意变动用I进行比较,定义了k k=j。 //不改变数组中的数值,定位到当前发现的最小值后与后面比较} } int t; t=a[k]; a[k]=a[i]; a[i]=t; //在内层找到最小值后,更换某个位置的数字}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。