排序演算法思想總結

2021-07-31 07:37:04 字數 2092 閱讀 9163

對於一名碼農來說,熟悉資料結構和演算法是最基本的,總結了一下各種排序演算法的思想:

例如:乙個待排序數列a = [1 4 7 2 5 8 3 6 9],要求從小到大排序

一、氣泡排序

對待排序數列從最後一位元素開始依次比較大小,一次迴圈比較n-1次之後即可將最小值放在首位,即a[n-1]與a[n-2],a[n-2]與a[n-3]...a[1]與a[0],如果a[n-1]小於a[n-2]則交換位置,經過n-1次比較之後a[0]即是最小值,接著進行第二次迴圈,因為a[0]已經是最小值,第二次迴圈只要比較n-2次即可,因此,整個排序需要o(n*n),演算法在比較過程中並沒有交換相等元素的順序,因此是穩定的。

二、選擇排序

每次迴圈從待排序序列中找出最小值放在第一位,然後從餘下的序列中找到最小值放在第二位,依次迴圈直到剩下乙個元素。選擇排序在找到最小值元素的一次迴圈中只記錄最小值元素的下標,等這次迴圈結束之後才交換元素順序。時間複雜度為o(n*n)

三、插入排序

依次遍歷序列,將遍歷的元素插入到有序序列中,第一次有序序列可以是第乙個元素,當向有序序列中插入元素中,依次將待插入元素與有序序列的元素進行比較(從有序序列末尾開始向前),如果待插入元素比有序序列中的元素小,則將有序序列向後移動一位,直到找到待插入元素比有序序列中的元素大則跳出迴圈,將待插入元素插入到有序序列中。時間複雜度為o(n*n),演算法是穩定的

四、希爾(shell)排序

希爾排序本質上來說是插入排序,只是它將序列分成若干子串行,每個子串行步長為a.length/2,每個子串行進行一次插入排序,當一次迴圈結束後,縮小步長為a.length/2/2,然後再重複進行子串行插入排序,最後當步長為0時,則進行一次全元素的插入排序。希爾排序的時間複雜度平均情況為o(n^1.3),最差情況為o(n*n)

五、快速排序

選定乙個基準元素(第乙個元素),設定兩個變數i,j,j從末尾元素向前遍歷如果找到小於基準元素則與基準元素進行交換,然後i從首位向後遍歷找到大於基準元素則進行交換,直到i==j停止交換,這樣一次迴圈得到的序列為比基準元素小的都在左邊,比基準元素大的都在右邊,然後左右兩邊子串行分別進行之前的迴圈操作。。。直到子串行元素個數為1。演算法的時間複雜度為o(n*log2n)這裡的log2n是以2為底的對數。

六、堆排序

堆排序用到的是二叉堆,分為大堆和小堆,大堆表示根節點為最大值,小堆則根節點為最小值,這裡我們用最大堆,排序思想是每次

構建的最大堆根元素與最後乙個元素a[n-1]交換順序,然後除最後乙個元素之外的n-1個元素重新構建大堆,接著將根與a[n-2]進行交換,依次迴圈之後得到有序序列。時間複雜度為o(n*log2n)

七、歸併排序

歸併排序的思想是分治的策略,即先無序序列按照序列長度一半擷取分為子串行,一次遞迴呼叫最後得到元素個數為1的子串行,將各個子串行排序後合併即得到有序序列。合併的過程就是比較兩個有序序列,兩個指標分別指向首元素位置,從首個元素開始依次往後,將較小元素先放入temp中,然後將指標往後移動一位。直到乙個序列遍歷完,將另乙個序列剩下的元素放到temp中。時間複雜度為o(n*log2n)

八、桶排序

(1)對於這個可列舉範圍構建乙個buckets陣列,用於記錄「落入」每個桶中元素的個數;

(2)將(1)中得到的buckets陣列重新進行計算,按如下公式重新計算:

buckets[i] = buckets[i] +buckets[i-1] (其中1<=i

九、基數排序

基數排序的總體思路就是將待排序資料拆分成多個關鍵字進行排序,也就是說,基數排序的實質是多關鍵字排序。

多關鍵字排序的思路是將待排資料里德排序關鍵字拆分成多個排序關鍵字;第1個排序關鍵字,第2個排序關鍵字,第3個排序關鍵字......然後,根據子關鍵字對待排序資料進行排序。

十、外部排序

外部排序不同於內部排序將排序元素載入到記憶體中進行排序,外部排序譬如說將兩個存放在磁碟中的檔案中的資料進行排序。

比如現在有[1 4 7 2 5 8 3 6 9 0]十個元素,記憶體一次只能讀取5個元素,那麼只能先將這十個元素放入到檔案中。

第一次先讀取1 4 7 2 5 排序之後1 2 4 5 7存入檔案,第二次讀取8 3 6 9 0排序之後0 3 6 8 9存入檔案,接著對依次讀取兩個檔案對元素進行逐個比較,排序之後得到0 1 2 3 4 5 6 7 8 9存入檔案中即可。

演算法思想 排序

排序並不是一種演算法思想,而是基於遍歷的一種演算法實現。形形色色的排序演算法,並不能絕對的認為哪一種排序最好,因為最好的度量指標究竟是耗時 記憶體占用亦或是穩定性是不確定的,這個要根據使用場景來決定,但是我們必須掌握各種排序方法的實現原理,這樣才能做到 具體問題具體分析 下圖為多種排序演算法的特性歸...

演算法思想總結

主定理 master theorem 二分查詢middle的確定 回溯法 動態規劃 貪婪演算法應用場景 遞迴的時間和空間消耗 return 語句和迴圈進行語句 迴圈和遞迴示例 以二分法為例子 刷題時,盡量不要使用異常捕獲,會消耗額外空間,拉低執行速度。出現tle time limit exceede...

排序演算法思想描述

排序演算法思想描述 qpz 一 直接選擇排序法 a 核心思想 在無序區間尋找最值與無序區間首元素交換 遍歷所有元素排序 1.記錄無序區間第乙個元素位置 2.向後遍歷所有元素尋找最值位置 尋找最大值還是最小值取決於降序還是公升序 3.遍歷結束以後找到最值,交換與記錄點的位置,記錄點向後移動一位 4.重...