C語言 氣泡排序

2021-07-23 08:58:40 字數 1589 閱讀 6756

氣泡排序:兩兩比較相鄰記錄的關鍵碼,如果反序則交換,直到沒有反序記錄為止

①、將整個待排序的記錄序列分成有序區和無序區,初始時有序區為空,無序區包括所有待排序的記錄

②、對無序區從前向後依次將相鄰記錄的關鍵碼進行比較,若反序則交換,從而使得關鍵碼小的記錄向前移,關鍵碼大的向後移(像水中的氣泡,體積大的先浮起來)

③、重複執行②。直到無序區中沒有反序的記錄

初始鍵值序列  [50 13  55  97  27  38  49  65]

一輪排序結果 [13 50 55 27 38 49 65] 97

二輪排序結果 [13 50 27 38 49] 55 65 97

三輪排序結果 [13 27 38 49] 50 55 65 97

四輪排序結果 13 27 38 49 50 55 65 97

①、在一輪氣泡排序中,若有多個記錄位於最終位,應該如何記錄

為此,設定變數exchange記錄每次元素交換的位置,則一輪排序後,exchange記錄的一定是這輪排序中 元素最後一次交換的位置,從此位置之後的所有元素都是已經有序的了

演算法if(args[r]>args[r+1])

②、如何確定氣泡排序範圍,使得已經位於最終位置的元素不參與下一輪排序

設定變數bound記錄的是無序區的最後乙個元素的索引,則每一輪排序的範圍是args[0]~~~args[bound]

演算法:for(j=0;j

<=bound-1;j++)

}

③、如何判別氣泡排序結束

判別結束條件應該是 在一輪排序過程中沒有進行元素的交換,那麼說明排序完成了。因此,在每一輪排序之前設定exchange=0,在這一輪的排序中,只要有元素的交換,那麼exchange的是一定大於0。
#include

void bubblesort(int *arg, int length);

void printarray(int *arg, int length);

void bubblesort(int *args, int length)

}

printf("%d:", ++count);//第幾輪

printarray(args,length);//列印一輪後的結果

}}void printarray(int *args, int length)

printf("]\n");

}int main(void);

bubblesort(args, 8);

return0;}

***********output**********

[50,13,55,97,27,38,49,65,]

1:[13,50,55,27,38,49,65,97,]

2:[13,50,27,38,49,55,65,97,]

3:[13,27,38,49,50,55,65,97,]

4:[13,27,38,49,50,55,65,97,]

請按任意鍵繼續. . .

氣泡排序 C語言

c語言是比較簡單基礎的排序方式,排序效率並不高,但是很穩定。通過rand隨機生產10個小於20的數來測試排序。氣泡排序 include include include void bubblesortbetter int a,int n 改進 if flag 0 break void bubbleso...

C語言 氣泡排序

直接看 吧 include void bubblesort int r,int len if exchange 如果沒有發生交換,提前終止演算法 return int main bubblesort aa,10 for int i 0 i 10 i printf d aa i printf n re...

氣泡排序(C語言)

通過先確定位置然後找數字的方法。把乙個數字放在合適位置上,這個選擇的位置可以是最前面的位置,也可以是最後面的位置。通過不斷對兩個相鄰數字進行順序調整,最終把合適的數字放在選定的位置上。氣泡排序 include void bubble sort int p num,int size int num 0...