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

#include<stdio.h>
int main()
{
void sort(int arry[],int n);
int a[10],i;
printf("enter array:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort(a,10);
printf("the sorted array:\n");
for(i=0;i<10;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;
}
}

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;

恳请说说这里的k=j;是什么意思,k=j;改为array[k]=array[j];意思是一样吗???

k=j;就保证第k个元素是当前一轮比较中目前最小的,比较完后就是这一轮中最小的,把它通过下面与第i个元素交换达到从小到大排序。选择法与冒泡法差不多,冒泡是每次都交换,而选择法是只与最小的交换,这最小的就是用k来记录的。k=j;改为array[k]=array[j]肯定不行啊,array[k]=array[j]搞乱了原来数组的值。追问

麻烦讲讲 k=i; 是什么意思呢?

追答

第k个元素和第j个元素比较的实质不就是第i个元素与第j个元素比较吗?前面已经说过了,k在一轮比较完成后是最小值元素的下标,那如果第i个元素就是最小的,k的值不就不动还是i吗?显然k=i就决定了从第i个元素起开始与后面的元素比较——因为i前面的元素已经排好序了不能再动了……

追问

把K换掉,例如换为d,为什么就不可以呢???

if(array[j]<array[k])
d=j;
t=array[d];array[d]=array[i];array[i]=t;

温馨提示:答案为网友推荐,仅供参考
相似回答