資料結構之各種排序的比較

2021-06-09 01:23:29 字數 2545 閱讀 9662

(一)直接插入排序

演算法簡潔,但是只有當待排元素n比較少的時候效率才高

所需空間:乙個當前元素的哨兵array[0]即可

最壞的情況——逆序:總的比較次數為n(n-1)/2,記錄的移動次數也為n(n-1)/2

最好的情況——正序:比較次數為n-1,記錄移動次數為0

由此可以推斷出插入排序演算法的平均時間為o(n^2),最壞的情況為o(n^2),輔助儲存為o(1),演算法優化:減少比較和移動的次數

穩定性:穩定的,插入排序本就是在乙個有序的序列裡插入乙個新的元素,當遇到兩個或多個一樣的元素時,自然是一律放到相同元素的最後面,所以這是穩定的

(二)希爾排序

也屬於插入排序類,又稱減小增量排序

基本思想:將序列由某乙個變化的增量分為若干子串行,再對這些子串行進行直接插入排序,等到整個序列基本有序的時候,再對整體進行一次直接插入排序

出發點:直接插入排序在n值較小以及在序列大致有序的時候效率很高

穩定性:我們知道一次插入排序是穩定的,不會改變相同元素的相對順序,但在不同的插入排序過程中,相同的元素可能在各自的插入排序中移動,最後其穩定性就會被打亂,所以shell排序是不穩定的。

希爾排序的時間會比直接插入排序少,但是少多少依賴於增量序列的函式,無法討論

(三)氣泡排序

最壞情況——逆序:需要進行n(n-1)/2次比較,n-1次排序,n(n-1)/2次記錄的移動

最好情況——正序:需要進行n-1次比較,0次排序,0次移動

穩定性:氣泡排序交換的是兩個相鄰元素,如果兩個元素相等,我們是不會交換兩個元素的位置的,所以這個排序是穩定的

(四)快速排序

最壞情況——逆序:o(n^2)

輔助儲存:o(logn)

快排所需時間為:一次對整體記錄進行劃分的時間 + 對前k-1個記錄進行快排的時間 + 對後n-k個記錄進行快排的時間,當然,一次對整體進行劃分的時間和n值成正比的

穩定性:快排有兩個指標low、high和乙個key,key一般為第乙個元素,也就是樞軸,j往前走,當j的內容小於key的時候,i就往後走,當i的內容大於key的時候,i和j的內容就互換,當i>j的時候,i和key互換內容,這是一趟排序,這時候很容易把穩定性打亂的

(五)堆排序

堆排序適用於n值較大的檔案,但對於n值較小的還是選擇希爾排序之類吧

最壞情況和平均時間是一樣的:o(nlogn)

輔助空間:o(1)即:乙個記錄大小共交換的空間

效能分析:1、堆排序是基於完全二叉樹的,對於深度為k的堆,至多2^k-1個記錄,我們從最後乙個非終端結點2^(k-1)的記錄開始篩選並建立乙個大頂堆,此時與關鍵字的比較次數至多為2(k-1)次;2、在建立堆的時候,由第i層記錄至多2^(i-1)次,以它們為根的記錄深度為h-i-1,那麼呼叫n/2次篩選演算法的時候,與關鍵字比較的次數至多為4n次;再看,n記錄的完全二叉樹深度為log2n+1,那麼建立新堆呼叫n-1次篩選演算法,總共的比較次數不超過2n(log2n),也就是o(nlog2n)

穩定性:目前只知道這是不穩定的。。。。。有木有大牛能解釋清楚

(六)歸併排序

效能分析:一次歸併排序會呼叫n/2h次歸併兩個相鄰有序序列的演算法,得到乙個長度為2h的有序序列,整個演算法會進行log2n次

輔助空間:歸併排序需要的空間的比較多,因為需要儲存乙個經過歸併的序列,它所需要的空間為o(n)

穩定性:歸併排序把序列分為若干含有1個或2個元素的序列,1個元素的序列預設為有序,2個元素的可以直接排序,同樣,我們是不會去交換兩個相等元素的值的,這樣將第一次歸併的序列看為新的子串行,重複歸併直到有序,這期間都是穩定的

(七)基數排序

基本思想:基數排序與前幾種排序均不同,它是將關鍵字分解成若干個原子關鍵字,通過對原子關鍵字的排序來實現對關鍵字的排序,例如3位數的排序可以分為個位數的排序、十位數的排序、百位數的排序

(採用鏈式儲存結構來實現吧,需要用到佇列)

效能分析:對n個數進行一次未被排序的最低位數的收集時,先對其進行一次分配,時間複雜度為o(n),然後對其收集,其時間複雜度為o(rd)(已知關鍵字所含原子關鍵字的取值範圍為0~d,rd為原子關鍵字的取值範圍),即一次分配收集的時間複雜度為o(d(n+rd)),整個排序的收集分配次數依據數值而定,三位數的就需要3次

輔助空間:o(2rd)即:2rd個佇列

穩定性:基數排序從低位開始分配、收集,一直到最高位排序完成,是分配和收集的時候是不可能調整兩個相同元素的位置的,是穩定的

(八)綜合分析

1、就平均時間而言,快排最為優秀,但在最壞情況下不是最好的

2、在n值較大的時候,使用堆排序和歸併排序較為有效,這其中以歸併排序時間最少,但是需要更多的空間

3、n值較大且關鍵字較小時,基數排序較適合,空間也只需要多加幾個佇列指標即可;而且基數排序是穩定性最強的,快排、堆排序、希爾排序都不穩定

4、從資料儲存結構來看,若排序中記錄未大量移動,可採用順序儲存結構,若記錄大量移動,則可採用靜態鍊錶實現(表插入排序、鏈式基數排序)

原文:

資料結構 各種排序演算法比較

一,各種排序演算法比較 各種排序演算法比較 二,相關概念 1 穩定排序和非穩定排序 簡單地說就是所有相等的數經過某種排序方法後,仍能保持它們在排序之前的相對次序,我們就說這種排序方法是穩定的。反之,就是非穩定的。比如 一組數排序前是a1,a2,a3,a4,a5,其中a2 a4,經過某種排序後為a1,...

資料結構 各種排序演算法的比較

一 實驗目的 實現常用的排序演算法,加深對這些演算法的理解,以後可以將這些演算法應用到實際問題的解決上。二 實驗題目 排序是在實際問題中經常用到的演算法,快速 選擇和插入三種排序演算法是排序演算法中最簡單的也是最常用到的,實現這三種演算法,在不同的數值串行上執行,然後比較三種方法的空間複雜度和時間複...

資料結構中各種內部排序演算法的比較

20101002 1 快速排序 quicksort 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來說,它是歸併排序的就地版本。快速排序可以由下面四步組成。1 如果不多於1個資料,直接返回。2 一般選擇序列最左邊的值作為支點資料。3 將序列分成2部分,一部分都大於支點資料,另外一部分...