排序演算法說明

2022-10-10 20:36:13 字數 1438 閱讀 3754

排序演算法是《資料結構與演算法》中最基本的演算法之一。

排序是乙個非常經典的問題,它以一定的順序對乙個陣列(或乙個列表)中的項進行重新排序(可以進行比較,例如整數,浮點數,字串等)(增加,非遞減,遞減, 增加,詞典等)。

有許多不同的排序演算法,每個都有其自身的優點和侷限性。

排序通常被用作各種電腦科學課程中的介紹性問題,以展示一系列演算法思想。

在不失概性的情況下,我們假設在這個視覺化中,我們將只按非遞減順序對整數進行排序,但不一定是明顯的。

排序演算法可以分為內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內部排序演算法有:插入排序、希爾排序、選擇排序、氣泡排序、歸併排序、快速排序、堆排序、基數排序等。用一張圖概括:

排序問題有許多有趣的演算法解決方案,體現了許多電腦科學的想法:

比較與非比較策略,

迭代與遞迴實現,

分而治之正規化,

最佳/最差/平均情況時間複雜性分析,

隨機演算法等

當(整數)陣列a排序時,涉及a的許多問題變得簡單(或更容易):

在陣列a中搜尋特定值v

查詢(靜態)陣列a中的最小/最大/第k個最小/最大值,

測試唯一性並刪除陣列a中的重複項,

計算特定值v在陣列a**現多少次,

設定陣列a和另乙個排序陣列b之間的交集/聯合,

尋找乙個目標對x∈ay∈a,使得x + y等於目標z等。

平方階 (o(n2)) 排序 各類簡單排序:直接插入、直接選擇和氣泡排序。

線性對數階 (o(nlog2n)) 排序 快速排序、堆排序和歸併排序;

o(n1+§)) 排序,§ 是介於 0 和 1 之間的常數。 希爾排序

線性階 (o(n)) 排序 基數排序,此外還有桶、箱排序。

關於穩定性

穩定的排序演算法:氣泡排序、插入排序、歸併排序和基數排序。

不是穩定的排序演算法:選擇排序、快速排序、希爾排序、堆排序。

名詞解釋:

簡易的快速排序演算法說明

快速排序是一種遞迴的思想,能實現o nlogn 的時間複雜度 看到這個我首先想的就是要進行二分和遞迴了 那麼我們遞迴的模式就應該是把序列劃分成前後兩部分,並使得前一部分資料都比後一部分資料小。這樣當遞迴完成後,資料就是有序公升序排列了。那麼首先我們先有乙個需要被遞迴呼叫的函式quicksort se...

array multisort 排序說明

第乙個引數是陣列,隨後的每乙個引數可能是陣列,也可能是下面的排序順序標誌 排序標誌用於更改預設的排列順序 之一 sort asc 預設,按公升序排列。a z sort desc 按降序排列。z a 隨後可以指定排序的型別 sort regular 預設。將每一項按常規順序排列。sort numeri...

堆排序說明

原文 上篇部落格主要講了氣泡排序 插入排序 希爾排序以及選擇排序。本篇部落格就來講一下堆排序 heap sort 看到堆排序這個名字我們就應該知道這種排序方式的特點,就是利用堆來講我們的序列進行排序。堆 其實就是一種有著特定結構的完全二叉樹,下方將會詳細的介紹一下堆。本篇部落格講的就是堆排序,首先我...