一到循環(huán)的“--”就沒思路
for (i = 8; i >= 0; i--)
{
????for (j = 0; j <= i; j++)
???????? if (arr[j]>arr[j + 1]
}?? 這段怎么理解?一共10個數(shù)。需要做9組循環(huán)比較 所以 i 取8 。每組循環(huán)里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表示小數(shù)點后精確到兩位
??????? else
??????????? printf("%.2f", arr[i]);??? //%.2f表示小數(shù)點后精確到兩位
??? }
??? for(i=0; i<9; i++)
??? {
??????? for(j=i+1;j<10;j++)
??????? {
??????????? if(????? arr[i] > arr[j]????? )????? //當前面的數(shù)比后面的數(shù)大時
??????????? {
??????????????? double temp;??? //定義臨時變量temp
??????????????? temp = arr[i];???? //將前面的數(shù)賦值給temp
??????????????? arr[i] = arr[j];????????????? //前后之數(shù)顛倒位置
??????????????? arr[j] = temp;????????????? //將較大的數(shù)放在后面?? ?
??????????? }??????????????? ?
??????? }?????????????? ?
??? }
??? printf("\n************排隊后*************\n");
??? for(i=0;i<10;i++)
??? {
??????? if(i != 9)? ?
??????????? printf("%.2f, ", arr[i]);? //%.2f表示小數(shù)點后精確到兩位??? ?
??????? else
??????????? printf("%.2f", arr[i]);??? //%.2f表示小數(shù)點后精確到兩位
??? }
??? return 0;?? ?
}
2019-08-05
你的方法也是正確的,只是角度不一樣。
for (i = 8; i >= 0; i--)
{
????for (j = 0; j <= i; j++)
???????? if (arr[j]>arr[j + 1]
}?
外循環(huán)每走一次排最大的到右邊,隨著外循環(huán)次數(shù)的遞增,內(nèi)循環(huán)次數(shù)減少(j <= i)