数组排序时,本意为从小到大排序,但结果打印为从大到小
#include <stdio.h>
int main()
{
int arr[10] = {3, 7, 1, 9, 10, 2, 4, 6, 5, 8};
int i = 0;
int j = 0;
int tmp = 0;
for(i=0; i<10; i++)
{
for(j=0;j<10;j++)
{
if(arr[i]>arr[j])
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
for(i=0; i<10; i++)
{
printf("%d ", arr[i]);
}
}
错误原因分析:
当 i = 0 时,下标 j 从 0 循环到 9,此时第一次排序结果为 1 7 3 9 10 2 4 6 5 8
当 i = 1 时,j 依然从 0 开始,但此时的 arr[j] = arr[0] = 1,而arr[i] = arr[1] = 7,会将 1 和 7 交换,从而导致经过10次循环后,最大的数反而排在最前面。
订正:
#include <stdio.h>
int main()
{
int arr[10] = {3, 7, 1, 9, 10, 2, 4, 6, 5, 8};
int i = 0;
int j = 0;
int tmp = 0;
for(i=0; i<10; i++)
{
for(j=i+1;j<10;j++)
{
if(arr[i]>arr[j])
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
for(i=0; i<10; i++)
{
printf("%d ", arr[i]);
}
}