史上最全排序演算法總結!建議收藏

視學演算法發表於2020-04-06

史上最全排序演算法總結!建議收藏

作者 | 鐵猴

責編 | 屠敏

出品 | CSDN 部落格

史上最全排序演算法總結!建議收藏

 簡介

本文對常見排序演算法進行總結。

史上最全排序演算法總結!建議收藏

排序演算法

氣泡排序

該演算法比較簡單,幾乎所有語言涉及到演算法時,都會涉及到冒泡演算法。

演算法思路:

  1. 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。

  2. 對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

  3. 針對所有的元素重複以上的步驟,除了最後一個。

    持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

選擇排序

每次選擇一個最大(小)的,直到所有元素都被輸出。

可參考:https://blog.csdn.net/sun7545526/article/details/85165618

直接插入排序

插入排序的基本方法是:每一步將一個待排序的元素,按其排序碼的大小,插入到前面已經排好序的一組元素的適當位置上去,直到元素全部插入為止

演算法思路:

當插入第i(i >= 1)時,前面的V[0],V[1],……,V[i-1]已經排好序。這時,用V[I]的排序碼與V[i-1],V[i-2],…的排序碼順序進行比較,找到插入位置即將V[i]插入,原來位置上的元素向後順移。

以[21,25,49,25,16,08]為例,排序過程如下所示:

史上最全排序演算法總結!建議收藏

在小規模資料集或是基本有序時,該演算法效率較高。

希爾排序

先對資料進行預處理,使其基本有序,然後再用直接插入排序演算法排序。

詳細過程可參考:https://blog.csdn.net/eric_sunah/article/details/103080731

快速排序

利用“分而治之”的思想對集合進行排序

可參考:https://blog.csdn.net/sun7545526/article/details/85165742

堆排序

說堆排序前,先說下啥是堆。

堆:堆是滿足下列性質的完全二叉樹:

  • 每個節點都大於或是等於其左右孩子節點的值,稱為大頂堆

  • 每個節點都小於或是等於其左右孩子節點的值,稱為小頂堆

接下來說下堆是如何做排序的,思路如下(以大頂堆為例):

  1. 根節點是整個堆的最大值,將它移走。

  2. 將剩餘n-1個節點重新構造成一個堆,再將根節點移走

  3. 重複執行1,2。直到沒有節點可移動,就生成了有序序列。

該算法有兩個需要解決問題:

  1. 如何將一個無序序列構建一個堆。

  2. 移除根節點後,如何用剩餘的節點重建堆。

詳細介紹參見:https://blog.csdn.net/eric_sunah/article/details/103081878

歸併排序

歸併排序(MERGE-SORT)是利用歸併的思想實現的排序方法,該演算法採用經典的分治(divide-and-conquer)策略(分治法將問題分(divide)成一些小的問題然後遞迴求解,而治(conquer)的階段則將分的階段得到的各答案"修補"在一起,即分而治之)。

詳細介紹參見:https://blog.csdn.net/eric_sunah/article/details/103082607

史上最全排序演算法總結!建議收藏

總結

分類總結:

史上最全排序演算法總結!建議收藏

時間複雜度總結:

史上最全排序演算法總結!建議收藏

版權宣告:本文為CSDN博主「鐵猴」加入原力計劃的原創文章。

- END -

如果看到這裡,說明你喜歡這篇文章,請轉發、點贊掃描下方二維碼或者微信搜尋「perfect_iscas」,新增好友後即可獲得10套程式設計師全棧課程+1000套PPT和簡歷模板向我私聊「進群」二字即可進入高質量交流群。

掃描二維碼進群↓

史上最全排序演算法總結!建議收藏

史上最全排序演算法總結!建議收藏

史上最全排序演算法總結!建議收藏

在看 史上最全排序演算法總結!建議收藏

相關文章