a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

算法之排序算法的算法思想和使用場景總結

2020-01-26 15:22:00
字體:
來源:轉載
供稿:網友

1. 概述

排序算法是計算機技術中最基本的算法,許多復雜算法都會用到排序。盡管各種排序算法都已被封裝成庫函數(shù)供程序員使用,但了解排序算法的思想和原理,對于編寫高質量的軟件,顯得非常重要。

本文介紹了常見的排序算法,從算法思想,復雜度和使用場景等方面做了總結。

2. 幾個概念

(1)排序穩(wěn)定:如果兩個數(shù)相同,對他們進行的排序結果為他們的相對順序不變。例如A={1,2,1,2,1}這里排序之后是A = {1,1,1,2,2} 穩(wěn)定就是排序后第一個1就是排序前的第一個1,第二個1就是排序前第二個1,第三個1就是排序前的第三個1。同理2也是一樣。不穩(wěn)定就是他們的順序與開始順序不一致。

(2)原地排序:指不申請多余的空間進行的排序,就是在原來的排序數(shù)據(jù)中比較和交換的排序。例如快速排序,堆排序等都是原地排序,合并排序,計數(shù)排序等不是原地排序。

總體上說,排序算法有兩種設計思路,一種是基于比較,另一種不是基于比較。《算法導論》一書給出了這樣一個證明:“基于比較的算法的最優(yōu)時間復雜度是O(N lg N)”。對于基于比較的算法,有三種設計思路,分別為:插入排序,交換排序和選擇排序。非基于比較的排序算法時間復雜度為O(lg N),之所以復雜度如此低,是因為它們一般對排序數(shù)據(jù)有特殊要求。如計數(shù)排序要求數(shù)據(jù)范圍不會太大,基數(shù)排序要求數(shù)據(jù)可以分解成多個屬性等。

3. 基于比較的排序算法

正如前一節(jié)介紹的,基于比較的排序算法有三種設計思路,分別為插入,交換和選擇。對于插入排序,主要有直接插入排序,希爾排序;對于交換排序,主要有冒泡排序,快速排序;對于選擇排序,主要有簡單選擇排序,堆排序;其它排序:歸并排序。

3.1  插入排序

(1) 直接插入排序
特點:穩(wěn)定排序,原地排序,時間復雜度O(N*N)
思想:將所有待排序數(shù)據(jù)分成兩個序列,一個是有序序列S,另一個是待排序序列U,初始時,S為空,U為所有數(shù)據(jù)組成的數(shù)列,然后依次將U中的數(shù)據(jù)插到有序序列S中,直到U變?yōu)榭铡?/p>

適用場景:當數(shù)據(jù)已經基本有序時,采用插入排序可以明顯減少數(shù)據(jù)交換和數(shù)據(jù)移動次數(shù),進而提升排序效率。

(2)希爾排序

特點:非穩(wěn)定排序,原地排序,時間復雜度O(n^lamda)(1 < lamda < 2), lamda和每次步長選擇有關。

思想:增量縮小排序。先將序列按增量劃分為元素個數(shù)近似的若干組,使用直接插入排序法對每組進行排序,然后不斷縮小增量直至為1,最后使用直接插入排序完成排序。

適用場景:因為增量初始值不容易選擇,所以該算法不常用。

3.2  交換排序

(1)冒泡排序

特點:穩(wěn)定排序,原地排序,時間復雜度O(N*N)
思想:將整個序列分為無序和有序兩個子序列,不斷通過交換較大元素至無序子序列首完成排序。

適用場景:同直接插入排序類似

(2)快速排序

特點:不穩(wěn)定排序,原地排序,時間復雜度O(N*lg N)
思想:不斷尋找一個序列的樞軸點,然后分別把小于和大于樞軸點的數(shù)據(jù)移到樞軸點兩邊,然后在兩邊數(shù)列中繼續(xù)這樣的操作,直至全部序列排序完成。

適用場景:應用很廣泛,差不多各種語言均提供了快排API

3.3  選擇排序

(1)簡單選擇排序

特點:不穩(wěn)定排序(比如對3 3 2三個數(shù)進行排序,第一個3會與2交換),原地排序,時間復雜度O(N*N)

思想:將序列劃分為無序和有序兩個子序列,尋找無序序列中的最小(大)值和無序序列的首元素交換,有序區(qū)擴大一個,循環(huán)下去,最終完成全部排序。

適用場景:交換少

(2) 堆排序

特點:非穩(wěn)定排序,原地排序,時間復雜度O(N*lg N)
思想:小頂堆或者大頂堆
適用場景:不如快排廣泛

3.4  其它排序

(1) 歸并排序

特點:穩(wěn)定排序,非原地排序,時間復雜度O(N*N)
思想:首先,將整個序列(共N個元素)看成N個有序子序列,然后依次合并相鄰的兩個子序列,這樣一直下去,直至變成一個整體有序的序列。
適用場景:外部排序

4. 非基于比較的排序算法

非基于比較的排序算法主要有三種,分別為:基數(shù)排序,桶排序和計數(shù)排序。這些算法均是針對特殊數(shù)據(jù)的,不如要求數(shù)據(jù)分布均勻,數(shù)據(jù)偏差不會太大。采用的思想均是內存換時間,因而全是非原地排序。

4.1 基數(shù)排序

特點:穩(wěn)定排序,非原地排序,時間復雜度O(N)

思想:把每個數(shù)據(jù)看成d個屬性組成,依次按照d個屬性對數(shù)據(jù)排序(每輪排序可采用計數(shù)排序),復雜度為O(d*N)

適用場景:數(shù)據(jù)明顯有幾個關鍵字或者幾個屬性組成

4.2  桶排序

特點:穩(wěn)定排序,非原地排序,時間復雜度O(N)

思想:將數(shù)據(jù)按大小分到若干個桶(比如鏈表)里面,每個桶內部采用簡單排序算法進行排序。

適用場景:0

4.3  計數(shù)排序

特點:穩(wěn)定排序,非原地排序,時間復雜度O(N)

思想:對每個數(shù)據(jù)出現(xiàn)次數(shù)進行技術(用hash方法計數(shù),最簡單的hash是數(shù)組!),然后從大到小或者從小到大輸出每個數(shù)據(jù)。

使用場景:比基數(shù)排序和桶排序廣泛得多。

5.  總結

對于基于比較的排序算法,大部分簡單排序(直接插入排序,選擇排序和冒泡排序)都是穩(wěn)定排序,選擇排序除外;大部分高級排序(除簡單排序以外的)都是不穩(wěn)定排序,歸并排序除外,但歸并排序需要額外的存儲空間。對于非基于比較的排序算法,它們都對數(shù)據(jù)規(guī)律有特殊要求 ,且采用了內存換時間的思想。排序算法如此之多,往往需要根據(jù)實際應用選擇最適合的排序算法。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 青青久视频 | 亚洲欧美一区二区三区久久 | 欧美一级欧美三级在线观看 | 日韩视频精品 | 无码少妇一区二区三区 | 亚洲精品一区久久久久久 | 韩国三级中文字幕hd有奶水 | 亚洲成人基地 | 久久美女视频 | 草比网站 | 久久久不卡| 国产一级片在线播放 | 亚洲精品99| 亚洲a视频 | 久久综合九色综合欧美狠狠 | 麻豆专区一区二区三区四区五区 | 国产精品久久久久国产a级 色999国产 | 日韩久草 | 国产黄色毛片 | 一级久久久 | 偷拍自拍亚洲色图 | 国产日韩精品在线 | 国产精品久久久久久久久久妞妞 | 国产成人精品免费 | 啵啵影院午夜男人免费视频 | 欧美日韩黄| 精品久久久久久久 | 一本色道久久88综合亚洲精品ⅰ | 日韩成人在线看 | 国产日韩欧美在线 | 园产精品久久久久久久7电影 | 国产一区二区不卡在线 | 国产一区视频在线 | 免费超碰 | 国产无毛 | 久久999免费视频 | 久久99国产精品久久99大师 | 欧美日本在线观看 | 色视频免费在线观看 | 婷婷色站| 国产在线高清 |