多種排序法間的比較

---------

冒泡排序

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

選擇排序--只會移動N次

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

插入排序

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

快速排序

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

歸併排序

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

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

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

總結排序

(1)若n較小(如n≤50),可採用直接插入或直接選擇排序。
     當記錄規模較小時,直接插入排序較好;否則因爲直接選擇移動的記錄數少於直接插人,應選直接選擇排序爲宜。
(2)若文件初始狀態基本有序(指正序),則應選用直接插人、冒泡或隨機的快速排序爲宜;
(3)若n較大,則應採用時間複雜度爲O(nlgn)的排序方法:快速排序、堆排序或歸併排序。
     快速排序是目前基於比較的內部排序中被認爲是最好的方法,當待排序的關鍵字是隨機分佈時,快速排序的平均時間最短;
     堆排序所需的輔助空間少於快速排序,並且不會出現快速排序可能出現的最壞情況。這兩種排序都是不穩定的。
     若要求排序穩定,則可選用歸併排序。但本章介紹的從單個記錄起進行兩兩歸併的  排序算法並不值得提倡,通常可以將它和直接插入排序結合在一起使用。先利用直接插入排序求得較長的有序子文件,然後再兩兩歸併之。因爲直接插入排序是穩定 的,所以改進後的歸併排序仍是穩定的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章