C语言,用选择法对数组中10个整数按由小到大排序?求解释!!!

#include<stdio.h>
int main()
{
void sort(int array[],int n);
int a[10],i;
printf("enter array:\n");
for(i=0;i<5;i++)
scanf("%d",&a[i]);
sort(a,5);
printf("The sorted array:\n");
for(i=0;i<5;i++)
printf("%d",a[i]);
printf("\n");
return 0;
}

void sort(int array[],int n)
{int i,j,k,t;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(array[j]<array[k])
k=j;
t=array[k];array[k]=array[i];array[i]=t;
}
}

中的空函数sort 为什么要让 k=i,j=k?求解释下sort函数的计算过程!!!
求大神们赐教啊!!!!

选择排序的思想是:每一趟的排序过程都是在当前位置后面剩下的待排序对象中选出值最小的那个,然后放到当前位置上。
该程序中k的定义主要是为了存放数组中最小数的位置。然后通过t=array[k];array[k]=array[i];array[i]=t;这三条语句,再把这数组中最小的数字放到前面。注意C语言当中的“=”不是等于,只是一种赋值运算。其中if(array[j]<array[k]) k=j;这条语句用来比较当前位置的值和初始值(即array[0]的值)的大小的。注意上述语句中第二个for循环的循环体语句只有一条,即:if(array[j]<array[k]) k=j;自己试着分析一下就明白了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-14
如程序所给出的sort函数,k=i是为了设置每次排序的开始,是参照点;j=k呢,就是将此轮比较中最小的个数赋值给数组中的第i个,完成此次选择中最小数的选择。第一次排序从数组中第一个数开始,通过比较,确定最小的数,并通过t=array[k];array[k]=array[i];array[i]=t;
,完成赋值给a[o].以此类推,第二次由数组中第二个数组元素开始,也就是a[1]开始,比较数组中以下元素的大小,选择出余下元素中最小的,赋值给a[1],完成此次选择。以此类推,得到一个完整有序的数组。其中,比较次数分别为n-1,n-2,n-3、、、总次数为(n-1)n/2。你仔细想一下就会出来的。。。:-D
第2个回答  2011-10-14
1、i=0, k=0,j=1,如果array[1]和array[0]比较,然后"k=1 t=array[k];array[k]=array[i];array[i]=t;"
表示将array[0]和array[1]较小的值赋给array[0];然后再将array[1]和array[2]作比较,将
较小的赋给array[0],如此类推,最后将最大值赋给array[0];
2、i=1, k,j重新赋值,按照1的结论将把除array[0]之外的所有值中最大的赋给array[1];
3、以此类推,将array[]升序排列。
空函数sort 让 k=i是为了只比较除最大数值之外的数值,k=j是为了在array[j]<array[k]时将较小的数值赋给array[i],若array[j]>=array[k],则不用k=j,直接将小值赋给array[i]。
不知道你能不能看懂 哈哈
第3个回答  2011-10-14
从第i个数开始,比较后面的数,把最小的和第i个交换
当i=0时,交换完成,a[i]就是从第0个开始到最后一个中最小的那个
当i=1时,交换完成,a[i]就是从第1个开始到最后一个中最小的那个
.......
k是最小数的下标,然后a[k]和a[i]的数字交换,a[i]就是最小的了
第4个回答  2011-10-14
首先以array[0]作为参照,从左到右扫描,找到最小的数据与array[0]位置交换。
接下来以array[1]作为参照,重复上述过程。
。。。
k=i定位参照
k=j找到剩下数组中最小值