楼主你说的对!蠢纯
这里k完全是画蛇添足。楼主你要相信自己,你把这个程序改写一下,就知道弊塌了租档圆。从你的问题发现你还需要大量的实践。要多自己写,哪怕是把书本上的程序原样输入电脑运行也好。只有这样你才会学会实际的编程技巧,理解一些看似简单但行之有效的细节问题,从而产生十足的信心。写一遍等于看五遍,光看不练是不行的。
以下是一个完整的选择排序的代码,就没用k.
/* 用选择排序法对一维整型数组中的十个数升序排序 程序在win-tc和Dev-c++下都调试通过*/
#include
#include
int main()
{int i,j,a[10],temp;
printf("Please input 10 integers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++) /* 选择法排序 */
for(j=i+1;j<10;j++)
if(a[i]>a[j])
{temp=a[i];/* 交换a[i]和a[j] */
a[i]=a[j];
a[j]=temp;
}
printf("The sequence after sort is:\n");
for(i=0;i<10;i++)
printf("%-5d",a[i]);
printf("\n");
system("pause");
return 0;
}
必须要k吧.
注意到k有两个地方被赋值,k=i和if(array[j]
必须要k吧.
注意到k有两个地方被赋值,k=i和if(array[j]
需要K的,K的作用是标记数组中最小的那个数,因为选择排序每次选择后最小的数都被交换到前面,所以假设第i个数为最小的数依次和后面的数进行比较,如果有更汪州拿小的则把该数困搭的下标赋值给K,最后得到最小的那个和第i个交换,小的数就到前面去了,然后就从第i+1个数开始迹岩选择最小的那个数,循环几次就完成排序了~~
我建议你,用你的想法,把这个过程改了,然后给十个数让程序运行试一下,你的体会就更好了。
我的回答是,k是存放内层FOR循环中最小数的下标,前正每循环一周指悔圆,挑出最小的数,按外层FOR循环的下标存储;
没有k,两个数比较,如何换位置,必须唯塌有第三个空间中转。你再体会一下