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语句中不行吗?的主要内容,如果未能解决你的问题,请参考以下文章

跪求C语言大神解决这些C语言选择题

c语言循环赋值

用C语言如何将一个一维数组中的元素随机排序

c语言的for语句中,第三个表达式为k++,k++该怎么理解?

C语言for循环

c语言里面,我for语句的循环跨度如果想是0.5应该怎么打呢,平时就是1++那么1+=0.5为啥