我遇到了一个很容易犯的错误。中间的值可能没有进行替换。
数组比大小的时候(从大到小排序),从第一个元素开始往后比的话,要考虑两种情况。
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; } } }
这样就可以顺利进行排序,中间就不会出现没有被替换的情况。