关于C选择排序

来源:百度知道 编辑:UC知道 时间:2024/05/13 04:29:39
void select_sort(int array[],int n)
{
int i,j,t,k;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(array[j]<array[k])k=j; //k存放一轮中的最小数的下标;
t=array[i];
array[i]=array[k];
array[k]=t;

}
}
选择排序的意义就是选出最小的和数组第一个元素交换,然后依次换.
但是我不明白的是 k=j有什么意义呢?
就算把最小的数组的下标及时的赋值给K.但是在下一次循环的时候又会把K赋值给下一个i值.进行下一轮循环
所以请解释 k=j有什么意义?
首先以一个元素为基准,从一个方向开始扫描,比如从左至右扫描,以A[0]为基准。
接下来从A[0],…,A[9]中找出最小的元素,将其与A[0]交换。
然后将基准位置右移一位,重复上面的动作,比如,以A[1]为基准,找出A[1]~A[9]中最小的,将其与A[1]交换。
其实和我说的意思差不多了。
我说的是选择排序啊.不是冒泡排序啊。而且算法已经用文字给出了。其实我又想了想.
k=j 如果j是从前往后比的话。那么k中间存放的值一定是最后一个比a[k]小的值.然后进行交换。最后完成一趟比较,进入k=1的状态。可是话说回来了。k=j.顶多也就实时的纪录一次比较状态下a[]这个数组状态的最小值。究竟有什么意义呢?

K=J就是循环复制最小的数给K,这样无论冒泡多少次都可以实现最小的排在最前面!

你说的思路是冒泡啊……
不明白你就删掉K=J试试结果有什么不一样,就知道了