c语言选择排序中为啥一层for循环中要定义变量k,直接把交换那一步写到上面if语句中不行吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言选择排序中为啥一层for循环中要定义变量k,直接把交换那一步写到上面if语句中不行吗?相关的知识,希望对你有一定的参考价值。
图好像不太清楚,也就是不定义变量k,在第二层for循环条件写成j>i,然后把temp交换那一步写到if语句中,并把k改成i这样有什么区别吗
因为他现在使用的是选择排序,在整个一次外循环中,用k来标记选择一个最小的元素的下标,等到内循环结束的时候再做一次交换,这样的操作可以大大减少交换的次数,提高排序操作的效率。反过来,如果是检测到一个大小顺序不对,就立刻进行交换,那样的话在一次内循环中就可能会交换很多次,效率就低了,因为每一次交换都需要三次赋值的。 参考技术A 交换次数的区别
书上的那种是先找出剩余变量里数值最大的变量的数组下标,再去交换
你说的就是每个数都去判断并交换
C语言中,关于排序的问题(输入n个数,输出最大的那个)
int n,max=0,t;
scanf("%d",&n);
int a[n],i,k; //这个a[n]必须要在输入n的值之后才能定义,不然定义不成。
for(i=1;i<=n;i++)
a[i]=0; //申请n个值
for(k=1;k<=n;k++)
{ scanf("%d",&t);
a[k]=t;
}
for(i=1;i<=n;i++)
{ if(max<a[i])
max=a[i];
}
printf("%d",max);
以上是关于c语言选择排序中为啥一层for循环中要定义变量k,直接把交换那一步写到上面if语句中不行吗?的主要内容,如果未能解决你的问题,请参考以下文章