排序演算法之五 氣泡排序及其改進

2021-07-22 21:20:40 字數 1396 閱讀 2034

氣泡排序是非常好理解的一種排序,每一次排序都可以確定乙個元素最終的位置

1.對序列從第乙個元素到最後乙個元素遍歷,如果當前元素小於下乙個元素,則交換位置

2.第 i 次遍歷,從第乙個元素到最後 n-i 個元素,如果當前元素小於下乙個元素,則交換位置

3.重複2直至第n-1次遍歷,輸出序列

原序列                      9   8   7   4   3    1   2   5    6     

第一次遍歷結束        8   7   4   3   1    2   5   6  9

第二次遍歷結束        7   4   3   1    2   5   6    8  9

第三次遍歷結束        4   3   1    2   5   6  7

8   9

第四次遍歷結束        3   1    2   4   5  6

7 8   9

第五次遍歷結束        1   2   3    4  5   6   7    8   9

。。。最後的序列               1   2   3    4   5   6   7    8   9

氣泡排序c語言實現:

氣泡排序最原始**:

void bubblesort(int a, int n) }

} }

氣泡排序改進1:對於上面排序演算法的演示中,當第五次遍歷結束時,第二次遍歷就沒有發生任何的元素交換,那麼則表示說明排序

已經完成,則後面的遍歷就不需要再做了,因此可以設定乙個標誌,當某一次遍歷沒有發生元素交換的時候,就不需要繼續排序了。

氣泡排序改進**:

void

bubblesort2(

inta, 

intn)  

k--;  

}  }  

氣泡排序改進2:如果乙個陣列在0-i是需要交換的,但是後面i+1-n是有序的不需要交換的(大於前面十個數),此時只需要前面十個數之間交換即可

//氣泡排序3

void

bubblesort3(

inta, 

intn)  

}  }  氣泡排序畢竟是一種效率低下的排序方法,在資料規模很小時,可以採用。資料規模比較大時,最好用其它排序方法。

(**借鑑

時間複雜度:

最好情況:序列本身就是有序的,一次遍歷即可,時間複雜度o(n)

最差情況:序列完全是反序的,需要n次遍歷,時間複雜度o(n2)

平均情況:o(n2)

空間複雜度:只需要乙個儲存空間中轉即可,為o(1)

穩定性:穩定

氣泡排序及其改進演算法

第乙個排序函式 sort1 為氣泡排序的典型實現,第二和第三個為改進後的排序函式 include include define len 20000 double sort1 int int double sort2 int int double sort3 int int int main int ...

氣泡排序及其改進

1.排序思想 氣泡排序也是非常簡單的排序演算法,易於理解。要點 1 也把陣列看作有序和無序部分,初始時將整個陣列視為無序 2 每次遍歷陣列中的無序部分,且兩兩比較,並將兩者中較大的元素置於後面一位,則一趟遍歷完成後,最大元素自然 沉到 無序部分的最後一位 3 減小無序部分的長度,迴圈第二步,直到陣列...

氣泡排序及其改進

氣泡排序作為最經典的演算法,雖然對大資料無用武之地。但是對於少量的資料,我們用氣泡排序,在時間複雜度上也是可以接受的,又因為它實現起來比較簡單,所以也經常的被人們使用。並且可以通過一些方法來改進最原始的氣泡排序,這種改進演算法的思路也有可取之處。前一兩天參加宜搜科技的筆試,就考到了氣泡排序。我當時就...