1. 程式人生 > >11. 常見的有哪幾種排序演算法,試比較其時間複雜度,以及是否穩定,及各自使用的情形

11. 常見的有哪幾種排序演算法,試比較其時間複雜度,以及是否穩定,及各自使用的情形

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值較小時的效能不如直接插入排序,因此在實際應用時,可將它們和直接插入排序“混合”使用。