排序演算法效能比較練習 《資料結構 演算法與應用》

2021-07-11 12:29:44 字數 2059 閱讀 1753

一:排序演算法複雜度

排序演算法

最壞情況效能

平均效能

氣泡排序 n2

n2計數排序

n2 n2

插入排序

n2 n2

選擇排序

n2 n2

堆排序nlog(n)

nlog(n)

歸併排序

nlog(n)

nlog(n)

快速排序

n2

nlog(n)

二、三值取中快排

由於快排對有序的輸入序列比對無序輸入序列要慢,為了解決這個問題,提高快排的平均效能,提出三值取中規則選擇支點元素。方法是對序列的最左頭元素、中間元素、最右頭元素取三者的中值元素作為支點元素。比如三元素分別為5、9、7,則取7為支點元素;

使用三值取中規則對輸入有序的表進行快速排序,用時為o(nlog(n))。並且不會出現乙個資料段為空的情況(當快排左右兩塊大小差不多時效能最好),使用三值取中就可以保證左右兩個資料段長度均衡

三、結合兩種效能好的排序演算法

實驗發現當排序的數量小於某值時,插入排序效能最好,大於某值,快速排序效能最好;所以可以設定某值c結合著這兩種演算法.

四、c++中的排序方法

sort:使用改進的快排,當子串行(已經經過了分治)的數量超過對數的某個常數倍時,使用堆排序,資料段不大時,使用過插入排序;

stable_sort:是歸併排序,當資料段不大時,使用插入排序。

五、效能最優排序演算法(18章課後題28)

發現:1,在1000以上,快排的效果就顯示出來了,幾百的時候插入排序就很快;2,隨著總數的上公升nbreak不能太小,在總數0.1倍的時候效果還可以,再小就越來越差。

(注:生成資料隨機,帶/的後面是stl的sort方法的執行時間,沒有的表示sort執行時間為0,每組試驗資料多次取平均):

總數

1000

5000

50000

nbreak=100

0.001

太慢

nbreak=500

0有時比sort好

0.017

nbreak=1000

0~0.001

0.012

nbreak=2000

0.008/0.001

nbreak=2500

0.010

/0.001

45.513/0.005

nbreak=5000

0.017

1.111/0.006

nbreak=10000

0.636/0.004

nbreak=20000

0.646/0.004

nbreak=25000

0.956/0.006

nbreak=50000

1.373/0.01

//書chp18 題28

#include

#include

#include

#include

#include

using namespace std;

//void insertsort(int b, int leftend, int rightend);

void mysort(int b, int leftend, int rightend);

int main()

void mysort(int b, int leftend, int rightend) ;

if (snum>nbreak)  //使用快排

if (a[1] > a[2])

} //取中間元素作為支點

int mid = b[(leftend + rightend) / 2];

mysort(b, 0, (leftend + rightend) / 2 - 1);

mysort(b, (leftend + rightend) / 2 + 1, rightend); }

else              //使用插入排序

} }

等看了二叉樹後,補上堆排序。

資料結構之排序的效能比較

一 前言 本文總結排序中的內部排序。內部排序是指待排序列完全存放在記憶體中所進行的排序過程,適合不太大的元素序列。二 正文 對於內排序來說,排序演算法的效能主要是受3個方面影響 1 時間效能 排序是資料處理中經常執行的一種操作,往往屬於系統的核心部分,因此排序演算法的時間開銷是衡量其好壞的最重要的標...

《面試之排序演算法效能比較》

效能穩定 平均時間複雜度為 o nlogn 最好時間複雜度為 o nlogn 最壞時間複雜度為 o nlogn 核心思想 1 分 只要可以分,就可以將list中的元素分成兩半,直到不能分則跳出 2 比 對於傳入兩個list,則要比較排序,則為了提高效率,輸入為有序list,3 合 對於輸入兩個有序的...

各種內排序演算法效能比較

各種內排序演算法效能比較 個人總結 穩定性最好情況 最壞情況 平均空間複雜度 確定最終位置 簡單選擇排序 屬於選擇排序 不穩定o n n 1趟 o n n 1趟 o n n 1趟 o 1 一趟排序後能確定某個元素的最終位置 直接插入排序 穩定o n n 1趟 o n n 1趟 反向有序 o n n ...