1. 程式人生 > >各種排序的比較和使用場景分析

各種排序的比較和使用場景分析

氣泡排序

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

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

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

插入排序

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

快速排序

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

歸併排序

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

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

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

總結排序

(1)若n較小(如n≤50),可採用直接插入或直接選擇排序。
     當記錄規模較小時,直接插入排序較好;否則因為直接選擇移動的記錄數少於直接插人,應選直接選擇排序為宜。
(2)若檔案初始狀態基本有序(指正序),則應選用直接插人、冒泡或隨機的快速排序為宜;
(3)若n較大,則應採用時間複雜度為O(nlgn)的排序方法:快速排序、堆排序或歸併排序。
     快速排序是目前基於比較的內部排序中被認為是最好的方法,當待排序的關鍵字是隨機分佈時,快速排序的平均時間最短;

     堆排序所需的輔助空間少於快速排序,並且不會出現快速排序可能出現的最壞情況。這兩種排序都是不穩定的。
     若要求排序穩定,則可選用歸併排序。但本章介紹的從單個記錄起進行兩兩歸併的  排序演算法並不值得提倡,通常可以將它和直接插入排序結合在一起使用。先利用直接插入排序求得較長的有序子檔案,然後再兩兩歸併之。因為直接插入排序是穩定 的,所以改進後的歸併排序仍是穩定的。

相關推薦

典型用戶場景分析

水平 用途 環境 大學生 空間 黑板 層次 重要性 可能 1. 名字:韓梅梅 年齡:39 職業:食堂阿姨 代表的用戶在市場上的比例和重要性:5% 較重要 知識層次和能力:可能不太會熟練使用手機APP 使用本軟件的環境:食堂或其他地方 典型場景:食堂阿姨撿到一張飯卡,將此信

各種排序演算法的場景以及c++實現(插入排序,希爾排序,氣泡排序,快速排序,選擇排序,歸併排序

對現有工作並不是很滿意,所以決定找下一個坑。由工作中遇到排序場景並不多,大都是用氣泡排序,太low,面試又經常問到一些排序演算法方面的東西。剛好讓小學妹郵的資料結構也到了。就把各種排序演算法重新總結一下,以作留存。 排序分為內部排序和外部排序,內部排序是在記憶體中排序。外

典型使用者模板場景分析24

姓名:張三 年齡:18 生活狀況:在校大學生 單身情況:單身 使用這個軟體的典型場景:下課休息和娛樂的時候 使用本軟體的環境:在教室,在宿舍,在食堂 只是層次和能力:愛探索 使用者偏好:女 動機:想要脫單   姓名:李四 年齡::23 生活狀況:公司白領 單身情況:熱戀

js 各種排序方法sort方法的區別

今天突發奇想,想明白sort方法是否比各種排序都有優勢,所以就參考別人的程式碼,做了一個測試,結果令人驚訝啊,上程式碼。 <!DOCTYPE html> <html lang="en"> <head> <meta char

各種作業系統簡介功能分析

Windows98/me Windows2000/XP Windows Server2003 Windows Vista Windows98/me是基於MS-DOS的混合的16/32位作業系統正慢慢的退出PC舞臺了,2000/X P以及Server2003都是基於WindowsNT的32位

各種排序比較使用場景分析

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

各種排序演算法總結比較

       排序演算法可以說是一項基本功,解決實際問題中經常遇到,針對實際資料的特點選擇合適的排序演算法可以使程式獲得更高的效率,有時候排序的穩定性還是實際問題中必須考慮的,這篇部落格對常見的排序演算法進行整理,包括:插入排序、選擇排序、氣泡排序、快速排序、堆排序、歸併

各種排序演算法的總結比較

1 快速排序(QuickSort)快速排序是一個就地排序,分而治之,大規模遞迴的演算法。從本質上來說,它是歸併排序的就地版本。快速排序可以由下面四步組成。(1) 如果不多於1個數據,直接返回。(2) 一般選擇序列最左邊的值作為支點資料。(3) 將序列分成2部分,一部分都大於支

各種內部排序演算法複雜度的比較排序方法的選擇

<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script> <iframe width="728" scrolling="no"

資料結構演算法分析排序篇--歸併排序(Merge Sort)常用排序演算法時間複雜度比較(附贈記憶方法)

歸併排序的基本思想 歸併排序法是將兩個或以上的有序表合併成一個新的有序表,即把待排序序列分成若干個子序列,每個子序列是有序的。然後再把有序子序列合併為整體有序序列。注意:一定要是有序序列! 歸併排序例項: 合併方法: 設r[i……n]由兩個有序子表r

各種內部排序演算法的比較選擇

各種內部排序演算法比較和選擇 演算法的簡單性 第一類是簡單演算法,包括直接插入排序、簡單選擇排序和起泡排序,這些演算法都比較簡單和直接,易於理解。第二類演算法是改進後的演算法,包括折半插入排序、希爾排序、錦標賽排序、堆排序、快速排序和歸併排序(歸併排序可

各種排序演算法分析比較

1.直接插入排序 每一趟將一個待排序的元素作為關鍵字,按照其關鍵字的大小插入到已經排好的部分序列的適當位置上。平均時間複雜度為O(n2),空間複雜度為O(1)。 void InsertSort(int R[], int n) { if (R == nullptr ||

歸併排序快速排序比較【演算法設計與分析實驗報告】

       下面的原始碼是修改的了時間差精確到了納秒級別的了,但是還是感覺很有誤差。無論怎麼測,總是快排比歸併快,即使是測試資料的陣列長度在10以內。         前面一樣的程式寫的是時間精確到微秒級的,陣列長度大概在一萬以內的,就是歸併排序快了,大於這個長度的快速排

各類排序演算法比較應用場景

簡介 插入排序 插入排序是一種較為簡單的排序演算法,它的基本思想是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。 形象的可以理解為打撲克抓拍的過程,通常我們右手抓牌,沒抓一張牌,就放到左手,抓下一張牌後,會把這張牌

各種排序算法的比較

sse sts mes log imp n) rtt clock random 1.main.cpp 主函數 #include <iostream> #include<algorithm> #include <string> #incl

java Date時間的各種轉換方式Mysql存時間類型字段的分析

技術分享 方法 空間 tr1 zone under mage 建表 util 一:各種Date之間的轉換方法 public class TimeTest { public static void main(String[] args) { Date date =

HttpSocket 優劣比較 使用場景選擇_轉

轉自:http://www.cnblogs.com/webwlsong/p/3198712.html 瞭解HTTP和Socket之前先對網路7層協議有個瞭解: 7 應用層 6 表示層 5 會話層  4 傳輸層  3 網路層  2 資料鏈路層  1 物理

python 快速排序插入排序比較

#coding=utf-8 #插入排序 import time testArr = [5,3,2,7,8,0,22,32,-1]; arrLen = testArr.__len__(); def insertSort(arr): for num in range(1,arrLen):

八種常見排序演算法的比較實現

首先排序演算法大的可以分為: 1、關鍵字比較 2、非關鍵字比較 關鍵字比較 關鍵字比較就是通過關鍵字之間的比較和移動,從而使整個序列有序, 而關鍵字比較的演算法,又可以像下面這樣劃分: 對於排序演算法之間的比較,無異於時間複雜度和空間複雜度。 從上表可以看出: 1、從平均時