程序是好的。正常运行:
#include
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 { k=i; for(j=i+1;j if(array[j] k=j; t=array[k];array[k]=array[i];array[i]=t; } }
#include
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{
d=k=i;
for(j=i+1;j
if(array[j]
d=j;
t=array[k];array[k]=array[i];array[i]=t;
}
}
程序23和30你这样子写是不对的你想想程序第28行if(array[j] 这个很重要相信我 因为人思考问题有时候一下想好几步 多数都是在这好几步中出错了。(你要做到于程序同步啊)哈哈
如程序所给出的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
从第i个数开始,比较后面的数,把最小的和第i个交换
当i=0时,交换完成,a[i]就是从第0个开始到最后一个中最小的那个
当i=1时,交换完成,a[i]就是从第1个开始到最后一个中最小的那个
.......
k是最小数的下标,然后a[k]和a[i]的数字交换,a[i]就是最小的了
快排、二叉树 这两个比较难,还可以使用指针定位。
-itjob