排序算法總結

插入排序

INSERTION-SORT(A)
    for j = 2 to A.length
        key = A[j]
        //Insert A[j] into the sorted sequence A[1..j-1]
        i = j - 1
        while i > 0 and A[i] > key
            A[i+1] = A[i]
            i = i - 1
        A[i+1] = key

歸并排序

//假設子數組A[p, q]和A[q+1, r]都已排好序
MERGE(A, p, q, r)
    n1 = q - p + 1
    n2 = r - q
    let L[1..n1+1] and R[1..n2+1] be new arrays
    for i = 1 to n1
        L[i] = A[p + i - 1]
    for j = 1 to n2
        R[j] = A[q+j]
    L[n1 + 1] = ∞
    R[n2 + 1] = ∞
    i = 1
    j = 1
    for k = p to r
        if L[i] <= R[j]
            A[k] = L[i]
            i = i + 1
        else A[k] = R[j]
            j = j + 1

MERGE-SORT(A, p, r)
    if p < r
        q = ?(p+r)/2?
        MERGE-SORT(A, p, q)
        MERGE-SORT(A, q+1, r)
        MERGE(A, p, q, r)

堆排序(最大堆)

PARENT(i)
    return ?i/2?

LEFT(i)
    return 2i

RIGHT(i)
    return 2i+1

MAX-HEAPIFY(A, i)
    l = LEFT(i)
    r = RIGHT(i)
    if l <= A.heap-size and A[l] > A[i]
        largest = l
    else largest = i
    if r <= A.heap-size and A[r] > A[largest]
        largest = r
    if largest ≠ i
        exchange A[i] with A[largest]
        MAX-HEAPIFY(A, largest)

BUILD-MAX-HEAP(A)
    A.heap-size = A.length
    for i = ?A.length/2? down to 1
        MAX-HEAPIFY(A, i)

HEAPSORT(A)
    BUILD-MAX-HEAP(A)
    for i = A.length downto 2
        exchange A[1] with A[i]
        A.heap-size = A.heap-size - 1
        MAX-HEAPIFY(A, 1)
BUILD-MAX-HEAP示意圖

快速排序

QUICKSORT(A, p, r)
    if p < r
        q = PARTITION(A, p, r)
        QUICKSORT(A, p, q-1)
        QUICKSORT(A, q+1, r)

PARTITION(A, p, r)
    x = A[r]
    i = p - 1
    for j = p to r-1
        if A[j] <= x
            i = i + 1
            exchange A[i] with A[j]
    exchange A[i+1] with A[r]
    return i + 1
快速排序過程圖

計數排序(假設n個輸入元素中的每一個都是0到k區(qū)間內的一個整數)

//數組A[1..n]是輸入,B[1..n]存放排序的輸出
COUNTING-SORT(A, B, k)
    let C[0..k] be a new array
    for i = 0 to k
        C[i] = 0
    for j = 1 to A.length
        C[A[j]] = C[A[j]] + 1
    //C[i] now contains the number of elements equal to i
    for i = 1 to k
        C[i] = C[i] + C[i-1]
    //C[i] now contains the number of elements less than or equal to i
    for j = A.length downto 1
        B[C[A[j]]] = A[j]
        C[A[j]] = C[A[j]] - 1

基數排序

//假設n個d位的元素存放在數組A中,其中第1位是最低位,第d位是最高位
RADIX-SORT(A, d)
    for i = 1 to d
        use a stable sort to sort array A on digit i

桶排序

//假設輸入是一個包含n個元素的數組A,且每個元素A[i]滿足0<=A[i]<=1
BUCKET-SORT(A)
    n = A.length
    let B[0..n-1] be a new array
    for i = 0 to n-1
        make B[i] an empty list
    for i = 1 to n
        insert A[i] into list B[?nA[i]?]
    for i = 0 to n-1
        sort list B[i] with insertion sort
    concatenate the list B[0], B[1], ... B[n-1] together in order
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 作者:大海里的太陽原文地址:http://www.cnblogs.com/wxisme/ 前言 查找和排序算法是算...
    IT程序獅閱讀 2,623評論 0 63
  • 排序算法幾種分類方式: 1,穩(wěn)定排序和不穩(wěn)定排序 如果a==b, 當排序之前a在b的前面,排序后,a仍然在b...
    fly_ever閱讀 499評論 0 0
  • 涼粉酸辣,米線要甜顏色紅!
    lucks368閱讀 217評論 0 0
  • 反思這件事我經常會做,這也是對自己情況的一個總結,發(fā)現出不足點。最近因為項目趕,都沒好好的靜下心來反思下。趁...
    edagarli閱讀 578評論 0 1
  • 走過越來越多的地方,就發(fā)現對某些偽之崇拜的人越來越鄙夷。 有一次,就看到一個朋友去了西藏,然后對那里佛教徒的虔誠朝...
    軻小盒閱讀 340評論 0 1

友情鏈接更多精彩內容