八大排序算法使用python實現

這個以前寫的,代碼已經丟失,待從新寫好代碼後補上。python

1、冒泡排序算法

冒泡排序算法的運做以下:數組

比較相鄰的元素。若是第一個比第二個大,就交換他們兩個。
對每一對相鄰元素做一樣的工做,從開始第一對到結尾的最後一對。這步作完後,最後的元素會是最大的數。
針對全部的元素重複以上的步驟,除了最後一個。
持續每次對愈來愈少的元素重複上面的步驟,直到沒有任何一對數字須要比較。
以上節選自維基百科app

代碼實現less

2、選擇排序性能

選擇排序(Selection sort)是一種簡單直觀的排序算法。它的工做原理以下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,而後,再從剩餘未排序元素中繼續尋找最小(大)元素,而後放到已排序序列的末尾。以此類推,直到全部元素均排序完畢。ui

以上節選自維基百科code

代碼實現:排序

def findSmallest(arr):  # 用於查找出數組中最小的元素,返回最小元素的索引。
    smallest = arr[0]
    smallest_index = 0
    for i in range(1, len(arr)):
        if smallest > arr[i]:
            smallest = arr[i]
            smallest_index = i
    return smallest_index

def selectSort(arr):
    newArr = []
    while arr:
        smallest = findSmallest(arr)
        newArr.append(arr.pop(smallest))
    return newArr

3、插入排序遞歸

步驟以下

從第一個元素開始,該元素能夠認爲已經被排序
取出下一個元素,在已經排序的元素序列中從後向前掃描
若是該元素(已排序)大於新元素,將該元素移到下一位置
重複步驟3,直到找到已排序的元素小於或者等於新元素的位置
將新元素插入到該位置後
重複步驟2~5
以上節選自維基百科

代碼實現

def insert_sort(data):
    for k in range(1, len(data)):
        cur = data[k]
        j = k
        while j > 0 and data[j - 1] > cur:
            data[j] = data[j - 1]
            j -= 1
        data[j] = cur
    return data

4、希爾排序

希爾排序經過將比較的所有元素分爲幾個區域來提高插入排序的性能。這樣可讓一個元素能夠一次性地朝最終位置前進一大步。而後算法再取愈來愈小的步長進行排序,算法的最後一步就是普通的插入排序,可是到了這步,需排序的數據幾乎是已排好的了(此時插入排序較快)。

以上節選自維基百科

代碼實現

5、歸併排序

原理以下(假設序列共有{displaystyle n}個元素):

將序列每相鄰兩個數字進行歸併操做,造成{displaystyle ceil(n/2)}個序列,排序後每一個序列包含兩/一個元素
若此時序列數不是1個則將上述序列再次歸併,造成{displaystyle ceil(n/4)}個序列,每一個序列包含四/三個元素
重複步驟2,直到全部元素排序完畢,即序列數爲1
以上節選自維基百科

代碼以下

6、快速排序

從數列中挑出一個元素,稱爲「基準」(pivot),
從新排序數列,全部比基準值小的元素擺放在基準前面,全部比基準值大的元素擺在基準後面(相同的數能夠到任何一邊)。在這個分割結束以後,該基準就處於數列的中間位置。這個稱爲分割(partition)操做。
遞歸地(recursively)把小於基準值元素的子數列和大於基準值元素的子數列排序。
遞歸到最底部時,數列的大小是零或一,也就是已經排序好了。這個算法必定會結束,由於在每次的迭代(iteration)中,它至少會把一個元素擺到它最後的位置去。

以上節選自維基百科

代碼以下:

def quick_sort(array):
    if len(array) < 2:
        return array
    else:
        pivot = array[0]
        less = [i for i in array[1:] if i <= pivot]
        greater = [i for i in array[1:] if i > pivot]
        return quick_sort(less) + [pivot] + quick_sort(greater)


array = [2, 5, 6, 2, 1]
print(quick_sort(array))

7、堆排序

若以升序排序說明,把數組轉換成最大堆積(Max-Heap Heap),這是一種知足最大堆積性質(Max-Heap Property)的二叉樹:對於除了根以外的每一個節點i, A[parent(i)] ≥ A[i]。

重複從最大堆積取出數值最大的結點(把根結點和最後一個結點交換,把交換後的最後一個結點移出堆),並讓殘餘的堆積維持最大堆積性質。

8、計數排序

以上節選自維基百科

代碼以下

本文章參考維基百科和八大排序算法python實現合輯

相關文章
相關標籤/搜索