C语言,0602P,选择排序法。
作者:互联网
我遇到了一个很容易犯的错误。中间的值可能没有进行替换。
数组比大小的时候(从大到小排序),从第一个元素开始往后比的话,要考虑两种情况。
1,后一个元素大于前一个元素,就要把这两者的值进行交换。
2,如果是前一个元素大于后一个元素,就保持前一个元素的值不动,进行下一次的循环,这里就要用到另一个临时变量进行控着这个值不动。
#include<stdio.h>
int main()
{
void sort(int array[],int n);//这里就是声明函数。
int a[10],i;
//printf("初始化数组\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort(a,10);//这里是调用函数。
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
return 0;
}
/*下面是定义函数,把它放到主函数的外面。然后再再主函数中声明这个函数的首部就可以用了。
或者可以直接复制循环结构拿出用。
*/
void sort(int array[],int n)//这里的 n 代表数组的大小。
{
int i,j,k,t;//这里的k用来临时替代数组元素。
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
{
if(array[j]>array[k])
{
k=j;
}
}
//后一个元素大于前一个元素就要把值赋给k,此时 k 不等于 i 就要进行前后两个元素的值替换。
//如果上面的条件没满足,此时 k 是等于 i的,那么下面的条件也不满足,就要进行下一次循环。
if(k!=i)
{
t=array[k];
array[k]=array[i];
array[i]=t;
}
}
}
这样就可以顺利进行排序,中间就不会出现没有被替换的情况。
标签:int,0602P,元素,C语言,就要,一个,array,排序 来源: https://blog.csdn.net/Lulu_qifei/article/details/121297813