1. 程式人生 > >常見排序介紹

常見排序介紹

分配排序 應該 所有 元組 選擇排序 num 堆排序 一次 排序。

直接插入排序

在插入第i個記錄的時,R1,R2...已經排好序,這時將關鍵字R依次與R1...比較,從而找到應該插入的位置,插入位置以及其後的記錄依次往後移動。
時間復雜度O(n^2) 空間復雜度O(1)

冒泡排序

首先將第一個記錄的關鍵字和第二個記錄的關鍵字進行比較,若為逆序,則交換這兩個記錄的值,然後比較第二個和第三個記錄的關鍵字,以此類推,知道第n-1個記錄和第n個記錄比較過為止。上述為第一趟冒泡排序,其結果是關鍵字最大的記錄被交換到第n個記錄的位置,然後進行第二趟冒泡排序,對前n-1個記錄進行同樣的操作,其結果關鍵字次大的記錄被交換到第n-1個記錄的位置,最多進行n-1趟,所有的記錄有序排列。
時間復雜度O(n^2) 空間復雜度O(1)

簡單選擇排序

通過n-i在關鍵字之間比較,從n-i-1個記錄中選出關鍵字最小的記錄,並和第i個記錄進行交換,當i等於n時所有的記錄有序排列
時間復雜度O(n^2) 空間復雜度O(1)

希爾排序

先將真個帶排序記錄分割成若幹個子序列,然後分別進行直接插入排序,帶真個序列的記錄基本有序時,在對全體記錄進行插入排序。
時間復雜度O(n^1.3) 空間復雜度O(1)

快速排序

用一組數組存儲記錄,附設兩個指針i和j,他們的初值分別為指向第一個記錄和最後一個記錄,設樞紐記錄的關鍵字為pivokey,則首先從j所指向位置起向前搜素,找到第一個關鍵字小於pivokey的記錄與樞紐記錄交換,然後從i所指向位置起向後搜索,找到第一個大於關鍵字pivokey的記錄與樞紐記錄相互交換,重復這個步驟知道i等於j
時間復雜度O(nlogn)~O(n^2) 空間復雜度O(logn)

堆排序

對一組待排序記錄的關鍵字,首先安裝堆的定義排成一個序列,從而可以輸出堆頂最大關鍵字,然後將剩余的關鍵字再調整新堆,以便得到次打的堆頂。如此反復,指導排成有序序列。
時間復雜度O(nlogn)

歸並排序

把n個記錄的無序文件看成是由n個長度為1的有序文件組成的文件,然後兩兩進行歸並,得到n/2個長度為2或1的有序文件,再兩兩歸並,如此反復,直到最後形成n個記錄的有序文件。
時間復雜度為O(nlogn)

基數排序

按照組成關鍵字的各個數位的值進行排序,他是分配排序的一種,在在該排序中把關鍵字K_i看成一個元組。然後一次對各元組低位到高位進行比較,直到最後排序所有的最高位,得到有序序列。
時間復雜度O(d(n+rd))

常見排序介紹