关于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;}}

程序是好的。正常运行:

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

}

}

追问

我是想懂为什么把K改为d,运行结果就不一样了???


追答

没有全部改,只是改了一部分,所以出错了。

还有,不需要d=k=i;

只要 d=i;

就行了。

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-11-07
#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,d;
for(i=0;i<n-1;i++)
{
d=k=i;


for(j=i+1;j<n;j++)

if(array[j]<array[k])

d=j;


t=array[k];array[k]=array[i];array[i]=t;
}
}

程序23和30你这样子写是不对的你想想程序第28行if(array[j]<array[k]) 这里会在某个时刻拿k作为下标的哦 (在26行每次的循环过程中是需要k的值在改变的而你把j赋值给了d自然不行)这个跟你讲不清楚 总之了解程序的步骤吧  一步步照着程序走一遍 

这个很重要相信我  因为人思考问题有时候一下想好几步  多数都是在这好几步中出错了。(你要做到于程序同步啊)哈哈

追问

恩公!求指点迷津..................

“一步步照着程序走一遍”????怎样照着程序走一遍呢?
“你要做到于程序同步啊”?????怎样做到于程序同步?

追答

如果我几句话你就明白了我就发财了!!
好好学吧 少年。

第2个回答  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
第3个回答  2011-10-14
从第i个数开始,比较后面的数,把最小的和第i个交换
当i=0时,交换完成,a[i]就是从第0个开始到最后一个中最小的那个
当i=1时,交换完成,a[i]就是从第1个开始到最后一个中最小的那个
.......
k是最小数的下标,然后a[k]和a[i]的数字交换,a[i]就是最小的了
第4个回答  2016-11-07
快排、二叉树 这两个比较难,还可以使用指针定位。

-itjob
相似回答