白話經典演算法系列 七大排序總結篇

2021-09-08 22:35:19 字數 922 閱讀 2727

核心思路

雙重迴圈

外層是進行多少輪,一輪冒泡只能排好乙個數,所以有n輪;(這是最好的理解方式)

內層是單次冒泡,冒泡的核心是逐個,相鄰元素兩兩比較,如此,一輪冒泡後,最大(最小)元素就跑到最後面了

//

核心**

void sort(int *a, int

len)

}

改進版1:

核心思想:如果某一趟內層沒有進行交換,那顯然整個陣列已經有序,那就可以退出了。

//

核心**

void sort(int *a, int

len)

}if (!flag) break

; }

}

實現:在所有迴圈外部設定乙個標籤true,表示此時陣列有序;最內層如果交換執行,標籤就會被設定為false,表明此時陣列無序,仍需進入下一輪;如果內層迴圈乙個也沒執行,那標籤就是原始的true;在外層迴圈內設定乙個條件跳出器,一旦檢測到true就結束外層迴圈。

改進版,網上有很多有意思的寫法,總體就是乙個多公尺諾玩具,相互觸發,很好玩。

//

巧妙的改寫版本

void sort(int *a, int

len)

}k--;

}}

改進2:

還有一種情況需要改進,即陣列前面部分無序,後面有序(3,2,1,4,5,6,7,8)。此時可以記錄那個臨界的位置,下次內層冒泡的終點就可以提前。

//

這種演算法還是少些得好,太晦澀

void sort(int *a, int

len)}}

}

白話經典演算法之七大排序總結篇

首先回顧下各種排序的主要思路 一 氣泡排序 氣泡排序主要思路是 通過交換使相鄰的兩個數變成小數在前大數在後,這樣每次遍歷後,最大的數就 沉 到最後面了。重複n次即可以使陣列有序。氣泡排序改進1 在某次遍歷中如果沒有資料交換,說明整個陣列已經有序。因此通過設定標誌位來記錄此次遍歷有無資料交換就可以判斷...

白話經典演算法系列之八 白話經典演算法之七大排序總結篇

在我的部落格對氣泡排序,直接插入排序,直接選擇排序,希爾排序,歸併排序,快速排序和堆排序這七種常用的排序方法進行了詳細的講解。首先回顧下各種排序的主要思路 一 氣泡排序 氣泡排序主要思路是 通過交換使相鄰的兩個數變成小數在前大數在後,這樣每次遍歷後,最大的數就 沉 到最後面了。重複n次即可以使陣列有...

七大排序演算法

氣泡排序 void bubble int a,int n 選擇排序 void select sort int a,int n n為陣列a的元素個數 將第i 小的數,放在第i 個位置 如果剛好,就不用交換 if i min index 插入排序 typedef int elementtype void...