python四種排序算法,冒泡、選擇、插入、快速

1.選擇排序

  • 首先將第一個(gè)元素依次與后面的元素比較,如果第一個(gè)元素比后面大,交換其位置,一輪下來,最小值會(huì)被移到第一位

  • 將第二個(gè)元素依次與后面比較,重復(fù)上述操作,第二輪下來,第二小的值會(huì)被移到第二位

  • 持續(xù)重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較。

def select_sort(array):
    length = len(array)
    for i in range(length):
        for j in range(i+1,length):
            if array[i] > array[j]:
                array[i],array[j] = array[j],array[i]
    return array

2.冒泡排序

  • 依次比較相鄰的元素。如果前者大于后者,就交換他們兩個(gè)。一組比較下來,最大值會(huì)被排到最后
  • 依次比較相鄰的元素,和第一步一樣,只是不比較最后一位,第二輪下來,第二大的值會(huì)被排到倒數(shù)第二位
  • 持續(xù)重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較。
def bubble_sort(array):
    length = len(array)
    for i in range(length):
        for j in range(0,length-i-1):
            if array[j] > array[j+1]:
                array[j],array[j+1] = array[j+1],array[j]
    return array

3.插入排序

  • 首先假設(shè)序列已經(jīng)被排序,所以開始位置從第二位開始,默認(rèn)第一位已經(jīng)排序好
  • 將需要排序的元素和它前面的每一個(gè)元素比較,如果有待插入元素比前面某一元素小,則將指定元素插入到其前面
  • 注意:待排序的元素需要事先保存,再與前方的元素比較
  • 一輪下來,待插入元素和它之前的元素都已經(jīng)被排好序
def insert_sort(array):
    for i in range(1, len(array)):
        key = array[i]
        j = i - 1
        while j >= 0 and key < array[j]:
            array[j + 1] = array[j]
            j -= 1
        array[j + 1] = key

4.快速排序

  • 挑選基準(zhǔn)值:從數(shù)列中挑出一個(gè)元素,稱為"基準(zhǔn)"(pivot);
  • 分割:重新排序數(shù)列,所有比基準(zhǔn)值小的元素?cái)[放在基準(zhǔn)前面,所有比基準(zhǔn)值大的元素?cái)[在基準(zhǔn)后面(與基準(zhǔn)值相等的數(shù)可以到任何一邊)。在這個(gè)分割結(jié)束之后,對(duì)基準(zhǔn)值的排序就已經(jīng)完成;
  • 遞歸排序子序列:遞歸地將小于基準(zhǔn)值元素的子序列和大于基準(zhǔn)值元素的子序列排序。
def partition(arr, low, high):
    i = (low - 1)  # 最小元素索引
    pivot = arr[high]
    for j in range(low, high):
        # 當(dāng)前元素小于或等于 pivot
        if arr[j] <= pivot:
            i = i + 1
            arr[i], arr[j] = arr[j], arr[i]
    arr[i + 1], arr[high] = arr[high], arr[i + 1]
    return (i + 1)
# arr[] --> 排序數(shù)組
# low  --> 起始索引
# high  --> 結(jié)束索引

# 快速排序函數(shù)
def quickSort(arr, low, high):
    if low < high:
        pi = partition(arr, low, high)
        quickSort(arr, low, pi - 1)
        quickSort(arr, pi + 1, high)

常見的時(shí)間復(fù)雜度高低排序:O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n2logn)<O(n3)
循環(huán)減半的過程,時(shí)間復(fù)雜度為O(logn)或O(log2n)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容