排序演算法圖解(插入、選擇、冒泡、快速、合併、希爾)
阿新 • • 發佈:2018-12-04
插入排序
- 從左至右兩兩對比,右邊的數比左邊的小,交換,交換,不斷往右移動
選擇排序
- 選定最左邊的數A,第二個數B,A和B比較,A>B則交換;B大於A,則取B後一位與A做相同的比較,不斷右移遍歷完,則把最小的放在了最左邊。再取第二個數變為A,做同樣的步驟
氣泡排序
- 同樣是經過兩兩對比,比如下圖,從左邊開始,第1,2位數對比,大的右移,第2,3位數對比,大的右移,以此類推,知道遍歷到末尾,則最大的數冒泡到最右邊
- 再回到開頭,再次按原方法對比右移,到前一次右移到末尾的前一位結束
快速排序
- 選擇最左邊的數作為基點A,位置標記為i,最右邊標記為j,然後i右移,遇到比A大的停下,j向左移動,遇到比A小的停下,然後i和j對應的數交換
- 當i和j相遇後,i,j對應的數要和A對比,比A大,繼續走,當i或j有個數比A小時,該數與A交換;然後分成兩份,交換數的左邊和右邊各自執行同樣的演算法
合併排序
- 合併排序簡而言之就是分而治之的思想
- 把所有資料一步步拆分,再不斷的兩兩合併排序
希爾排序
- 希爾排序是基於插入排序的以下兩點性質而提出改進方法的:
- 插入排序在對幾乎已經排好序的資料操作時,效率高,即可以達到線性排序的效率
- 但插入排序一般來說是低效的,因為插入排序每次只能將資料移動一位
- 希爾排序通過將比較的全部元素分為幾個區域來提升插入排序的效能。這樣可以讓一個元素可以一次性地朝最終位置前進一大步
- 然後演算法再取越來越小的步長進行排序,演算法的最後一步就是普通的插入排序,但是到了這步,需排序的資料幾乎是已排好的了(此時插入排序較快)。
- 假設有一個很小的資料在一個已按升序排好序的陣列的末端。可能會進行n次的比較和交換才能將該資料移至正確位置。而希爾排序會用較大的步長移動資料,所以小資料只需進行少數比較和交換即可到正確位置