C語言 氣泡排序

2021-09-07 20:04:39 字數 1207 閱讀 8047

對於一組數字的排序,我們通過迴圈比較兩個相鄰元素的大小,若為公升序排列則將最大值替換到最後。這樣依次類推進行多趟氣泡排序即可將這組數字公升序排列。

例如:10,9,8,7,6,5,4,3,2,1

通過一趟氣泡排序,我們將10置於最後一位。(9,8,7,6,5,4,3,2,1,10)

第二趟氣泡排序我們將9置於倒數第二位。(8,7,6,5,4,3,2,1,9,10)

以此類推,每次需要判斷交換兩元素的次數減少1。

#include #include void bubble_sort(int arr, int sz)

} }}void print(int arr, int sz)

printf("\n");

}int main()

; int sz = sizeof(arr) / sizeof(arr[0]);

print(arr, sz);

bubble_sort(arr, sz);

print(arr, sz);

system("pause");

return 0;

}

基於此**我們還可以進行優化。

我們考慮到若一組資料部分有序,在進行若干趟氣泡排序的過程中,沒有任何一組兩個元素交換時,說明陣列已經排列完成,因此可以停止氣泡排序。這樣可以提高程式的效率。

此時我們引入乙個flag變數,並初始化為0,只要在趟數中有元素交換我們則令flag為1,若當有一趟氣泡排序沒有元素交換時,flag仍為0,此時加入判斷停止條件即可。

例如:10,1,2,3,4,5,6,7,8,9---->此時我們只需要進行一趟氣泡排序

#include #include void bubble_sort(int arr, int sz)

} if (flag == 0)//沒有元素交換時,則停止氣泡排序

break; }}

void print(int arr, int sz)

printf("\n");

}int main()

; int sz = sizeof(arr) / sizeof(arr[0]);

print(arr, sz);

bubble_sort(arr, sz);

print(arr, sz);

system("pause");

return 0;

}

C語言 氣泡排序

氣泡排序 兩兩比較相鄰記錄的關鍵碼,如果反序則交換,直到沒有反序記錄為止 將整個待排序的記錄序列分成有序區和無序區,初始時有序區為空,無序區包括所有待排序的記錄 對無序區從前向後依次將相鄰記錄的關鍵碼進行比較,若反序則交換,從而使得關鍵碼小的記錄向前移,關鍵碼大的向後移 像水中的氣泡,體積大的先浮起...

氣泡排序 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...