氣泡排序(C語言) 解析

2022-09-15 23:30:24 字數 1494 閱讀 4644

排序演算法是一種重要的、基本的演算法。排序的方法有很多,在這裡給大家講解一下「冒泡法排序」。

「氣泡排序」的基本思路是:每次將相鄰兩個數比較,將小的調到前頭(本例預設是按遞增排列)。

若有6個數:9,8,5,4,2,0。

第一次先將最前面的兩個數 8 和 9 對調(見圖1)。

第 2 次將第 2 和第 3 個數( 9 和 5)對換……如此共進行5次,

得到 8 - 5 - 4 - 2 - 0 - 9的順序。

可以看出:最大的數 9 已經「沉底」,成為最下面乙個數,而小的數則「上公升」。最小的數 0 已向上「浮起」乙個位置。經過第一趟(共計5次比較與交換)後,

已得到最大的數9。

然後進行第 2 趟比較,對餘下的前面 5 個數(8,5,4,2,0)進行新一輪的比較,

以便使次大的數「沉底」。按以上方法進行第 2 趟比較,見圖2。

經過這一趟 4 次比較與交換,得到次大的數 8。

按此規律進行下去,可以推出,對 6 個數要比較 5 趟,才能使 6 個數大小順序排列。

在第一趟中要進行兩個數之間的比較共 5 次,在第 2 趟過程中比較 4 次……

第 5 趟只需比較 1 次。

由此推出,如果有 n 個數,則要進行 n - 1 趟比較。在第一趟比較中要進行 n - 1 次兩兩比較,在第 j 趟比較中要進行 n - j 次兩兩比較。

再次分析排序的過程,原來 0 是最後乙個數,經過第 1 趟比較與交換,0 上公升為第 5 個數(最後第 2 個數)。再經過第 2 趟比較與交換,

0 上公升為第 4 個數(最後第 3 個數)。再經過第 3 趟比較與交換,0 上公升為第 3 個數……每經過一趟的比較與交換,最小的數「上公升」一位,

最後公升到第乙個數。這如同水底的氣泡逐步冒出水面一樣,故稱為「冒泡法」,或「起泡法」。

據此畫出流程圖(圖3)(假設n = 10)

**(c語言):

1 #include2

intmain()

318 printf("

the sorted numbers :\n");

19for(i = 0;i < 10; i++) //

輸出 20 printf("

%d ",a[i]); //

陣列 21 printf("\n"

);

22return0;

23 }

輸出/輸出結果:

上述起泡排序的最壞情況是陣列 a 的初態為降序,在此最壞情況下的素顏發時間複雜度為t(n) = o(n^2)。

一般情況下,除特別指明外,演算法的時間複雜度均指最壞情況下的時間複雜度。

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...