#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=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;