各種排序的比較、使用場景分析、總結

各種排序的比較、使用場景分析、總結

冒泡排序

冒泡排序重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說排序完成。規模比較小的時候應用冒泡排序,主要應用於教學。。。

選擇排序–只會移動N次

選擇排序的主要思想:首先找到數組中最小的那個元素,其次,將它和第一個元素交換。接下來找第二小和第二個交換。運行時間和輸入無關,數據移動最少。當數據量較小的時候適用。

插入排序

時間複雜度為O(n^2),數據量小時使用。並且大部分已經被排序。

快速排序

快速排序是最快的通用排序算法,在大多數實際情況中,快速排序是最佳選擇。在java的默認排序中是使用的是三向切分排序。

歸併排序

如果需要穩定,空間不是很重要,請選擇歸併。

O(n)時間複雜度的桶排序

當範圍已經知道,而且空間不是很重要的情況下使用桶排序。

各種排序的比較、使用場景分析、總結

總結排序

(1)若n較小(如n≤50),可採用直接插入或直接選擇排序。

當記錄規模較小時,直接插入排序較好;否則因為直接選擇移動的記錄數少於直接插人,應選直接選擇排序為宜。

(2)若文件初始狀態基本有序(指正序),則應選用直接插人、冒泡或隨機的快速排序為宜;

(3)若n較大,則應採用時間複雜度為O(nlgn)的排序方法:快速排序、堆排序或歸併排序。

各種排序的比較、使用場景分析、總結

快速排序是目前基於比較的內部排序中被認為是最好的方法,當待排序的關鍵字是隨機分佈時,快速排序的平均時間最短;

堆排序所需的輔助空間少於快速排序,並且不會出現快速排序可能出現的最壞情況。這兩種排序都是不穩定的。

若要求排序穩定,則可選用歸併排序。但本章介紹的從單個記錄起進行兩兩歸併的 排序算法並不值得提倡,通常可以將它和直接插入排序結合在一起使用。先利用直接插入排序求得較長的有序子文件,然後再兩兩歸併之。因為直接插入排序是穩定 的,所以改進後的歸併排序仍是穩定的。

各種排序的比較、使用場景分析、總結


分享到:


相關文章: