1. 程式人生 > >淺談排序演算法的效率(Java筆記)

淺談排序演算法的效率(Java筆記)

排序演算法有很多種,每一種都有其優缺點,可以適應不同的場合。排序演算法的好壞,主要是看排序效率,排序效率的一個重要指標就是速度,速度是影響排序演算法的最主要因素。

一般來說,判斷一個演算法的優劣,可以從以下兩個方面進行:

  1. 演算法的複雜度:以O表示,往往從最差,平均,最好三種情況來評價。
  2. 系統資源的佔用:主要是記憶體和其他資源的佔用,一個好的演算法應該佔用少的記憶體資源。

常用排序演算法——計算複雜度比較:

  • 氣泡排序法:平均演算法速度O(n^2),最壞情況下的演算法速度O(n^2)
  • 快速排序法:平均演算法速度O(nlogn),最壞情況下的演算法速度O(n^2)
  • 選擇排序法:平均演算法速度O(n^2)
    ,最壞情況下的演算法速度O(n^2)
  • 堆排序法:平均演算法速度O(nlogn),最壞情況下的演算法速度O(nlogn)
  • 插入排序法:平均演算法速度O(n^2),最壞情況下的演算法速度O(n^2)
  • shell排序法:平均演算法速度O(n^(3/2)),最壞情況下的演算法速度O(n^2)
  • 合併排序法:平均演算法速度O(nlogn),最壞情況下的演算法速度O(nlogn)

常用排序演算法——佔用系統資源比較:

  • 以上的排序演算法中,大部分都只需要1個元素的儲存單元(用於交換資料)。
  • 而合併排序演算法需要與原始序列一樣長的n個元素的儲存單元(用於儲存多遍合併操作)。
  • 因此合併排序演算法的佔用系統資源大。

其實,沒有某一種演算法是絕對好的,不同的演算法有其各自的優劣,演算法的選擇需要結合實際的情況。

  • 當資料量n較小時,可以採用插入排序法,選擇排序法或氣泡排序法。
  • 當資料量n較大時,則應該採用快速排序法,堆排序法或合併排序法等計算複雜度為O(nlogn)的演算法。
  • 如果需要排序的資料是隨機分佈的(沒有規律),則採用快速排序法的平均演算法時間最短。

總結:合適的演算法一定是根據實際問題的需要來選擇,這樣才能達到更高的演算法執行效率。