-
你首先必須了解這個演算法,這是最簡單的。
#define size 8
void bubble_sort(int a,int n)int i, j, temp;
for (j = 0; j < n - 1; j++)for (i = 0; i < n - 1 - j; i++)if(a[i] >a[i + 1])
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
int main()
int number[size] = ;
int i;
bubble_sort(number, size);
for (i = 0; i < size; i++)printf("%d", number[i]);
printf("");
-
因為陣列的下標從0開始,所以兩個for語句中的9應該改成8,然後用冒泡法反轉順序的大小,順序應該從最後乙個開始,所以嵌入的for應該改為<9-d,希望能幫到你。
--語言支援小組隨時為您服務。
-
排序步驟不正確,即 for(b 0) 段。
-
陣列 0 到 8 已經是 9 個數字。
-
陣列是按順序儲存在記憶體中的,雖然 a[10] 是越界的,但 a[10] 是有值的,你的程式公升序排序可以正確執行,你把“if”改成<,降序排序,程式會出錯,這是因為你是 a[10] 只是乙個大數,a[9]>a[10] 不是真的,a[10] 是沒有意義的。
要使程式按公升序或降序正確執行,請將其更改為 for(i=0; i<9;i++)
for(j=i;j<10-i-1;j++) 線上。
-
氣泡排序方法的確切形式應如下所示:
for(i=0;i<9;i++)
for(j=0;j<10-i-1;j++)if(a[j]>a[j+1])
for(i=0;i<10;i++)
printf("%4d",a[i]);
printf("");
-
實際上,你的兩個迴圈是錯誤的,for(i=0; i<9;i++)for(j=0;j<10-i;j++)這兩個迴圈應該這樣寫:for(i=1; i,開始i=1,j<9,則迴圈從j=0到j=8,使迴圈為9次,即比較第乙個數字和後面的9個數字,然後依次比較到最後,輸出結果。
-
j 不能是 9; 這樣你的兩個問題就解決了!
#include
main()
for(i=0;i<9;i++)
for(j=0;j<9-i;j++) j<10-1-i 在這裡是錯誤的。
if(a[j]>a[j+1])
for(i=0;i<10;i++)
printf("%4d",a[i]);
printf("");}
-
同學們,先解決問題1:
你的第乙個問題是正確的,a[10] 確實越界,越需要再次處理,每次 j 不應該是 10-i 而是 10-i-1; 它為什麼有效?
VS 行不通。 vc 6 下沒有資料邊界檢查,因此工作正常。 當我在這裡除錯時,它顯示了乙個[10],也就是說,你說的元素的值預設是越界的:
1638280 所以,它肯定不會影響你的排序,因為if(a[j]>a[j+1])。
所以看起來它工作正常。 (如果您知道如何除錯,則不會遇到此問題。
問題 2 是你理解的問題,氣泡排序就是每次都把最大的乙個放在最後,那麼下一輪就不需要輪的最後乙個元素了,比如 4 3 2 1 變成 3 2 1 4 那麼你編排的時候就不需要考慮 4。 最後一輪,只要有那麼多j=0 j=1的枝條就沒關係了,後面的比前面的要大,自然就不要比較了!!
不是很清楚,希望能解決你心中的疑惑。 請領養!! 嘻嘻......