for (i = 8; i >= 0; i--)
{
for (j = 0; j <= i; j++)
if (arr[j]>arr[j + 1]
} 这段怎么理解?一共10个数。需要做9组循环比较 所以 i 取8 。每组循环里arr[j] 和arr[j+1] 做比较和交换。
我自己写的是这个:
#include <stdio.h>
int main()
{
double arr[]={1.78, 1.77, 1.82, 1.79, 1.85, 1.75, 1.86, 1.77, 1.81, 1.80};
int i,j;
printf("\n************排队前*************\n");
for(i=0;i<10;i++)
{
if(i != 9)
printf("%.2f, ", arr[i]); //%.2f表示小数点后精确到两位
else
printf("%.2f", arr[i]); //%.2f表示小数点后精确到两位
}
for(i=0; i<9; i++)
{
for(j=i+1;j<10;j++)
{
if( arr[i] > arr[j] ) //当前面的数比后面的数大时
{
double temp; //定义临时变量temp
temp = arr[i]; //将前面的数赋值给temp
arr[i] = arr[j]; //前后之数颠倒位置
arr[j] = temp; //将较大的数放在后面
}
}
}
printf("\n************排队后*************\n");
for(i=0;i<10;i++)
{
if(i != 9)
printf("%.2f, ", arr[i]); //%.2f表示小数点后精确到两位
else
printf("%.2f", arr[i]); //%.2f表示小数点后精确到两位
}
return 0;
}
你的方法也是正确的,只是角度不一样。
for (i = 8; i >= 0; i--)
{
for (j = 0; j <= i; j++)
if (arr[j]>arr[j + 1]
}
外循环每走一次排最大的到右边,随着外循环次数的递增,内循环次数减少(j <= i)