11. 常見的有哪幾種排序演算法,試比較其時間複雜度,以及是否穩定,及各自使用的情形
阿新 • • 發佈:2019-01-04
1、幾種常見排序演算法的時間複雜度
排序方法 |
平均情況 |
最好情況 |
最壞情況 |
直接插入排序 |
O(n2) |
O(n) |
O(n2) |
起泡排序 |
O(n2) |
O(n) |
O(n2) |
快速排序 |
O(nlog2n) |
O(nlog2n) |
O(n2) |
簡單選擇排序 |
O(n2) |
O(n2) |
O(n2) |
堆排序 |
O(nlog2n) |
O(nlog2n) |
O(nlog2n) |
歸併排序 |
O(nlog2n) |
O(nlog2n) |
O(nlog2n) |
由此可見,在最好情況下,直接插入排序和起泡排序最快;平均情況下,快速排序最快;在最壞情況下,堆排序和歸併排序最快。
2、穩定性比較
穩定性演算法包括:直接插入排序,起泡排序,歸併排序;
非穩定性演算法包括:堆排序,快速排序,簡單選擇排序;
3、使用情形分析
- 當待排序記錄個數n較大,關鍵碼分佈較隨機,且對穩定性不作要求時,宜採用快速排序
- 當待排序記錄個數n較大,記憶體空間允許,且要求排序穩定時,宜採用歸併排序
- 當待排序記錄個數n較大,關鍵碼分佈可能出現正序或逆序的情況,且對穩定性不作要求時,宜採用堆排序或歸併排序。
- 當待排序記錄個數n較大,而只要找出最小的前幾個記錄,採用堆排序或者簡單選擇排序
- 當待排序記錄個數n較小,記錄已基本有序,且要求穩定,宜採用直接插入排序
- 快速排序和歸併排序在待排序記錄個數n值較小時的效能不如直接插入排序,因此在實際應用時,可將它們和直接插入排序“混合”使用。