冒泡排序、插入排序、合并排序以及快速排序

主要說(shuō)明冒泡排序、插入排序、合并排序以及快速排序原理,附上python實(shí)現(xiàn)代碼以及原理樣例圖

1、冒泡排序

冒泡排序邏輯
"""
冒泡排序
"""
def bubble_sort(array):

    startT = time.time()

    n = len(array)

    for i in range(n):

        already_sorted = True

        for j in range(n-i-1):
            if array[j] > array[j+1]:
                array[j],array[j+1] = array[j+1],array[j]

                already_sorted = False


        if already_sorted:
            break;

    print("冒泡排序耗時(shí):%s" % str(time.time() - startT))

    return array

2、插入排序

插入排序邏輯
"""
插入排序算法
"""
def insertion_sort(array):

    for i in range(1,len(array)):

        key_item = array[i]

        j = i-1;

        while j>=0 and array[j] > key_item:
            array[j+1] = array[j]
            j -= 1

        array[j+1] = key_item
    return array

3、合并排序

合并排序邏輯
"""
合并排序
"""
#合并數(shù)組
def merge(left,right):
    #如果有一個(gè)數(shù)組為空,不需要合并
    if len(left) == 0:
        return right

    if len(right) == 0:
        return left

    result = []
    index_left = index_right = 0

    #查看兩個(gè)數(shù)組,直到所有元素都裝進(jìn)結(jié)果數(shù)組中
    while len(result) < len(left)+len(right):

        #決定從哪個(gè)數(shù)組中取數(shù)據(jù)放入result
        if left[index_left] <= right[index_right]:
            result.append(left[index_left])
            index_left+=1
        else:
            result.append(right[index_right])
            index_right+=1

        if index_left == len(left):
            result+=right[index_right:]
            break

        if index_right == len(right):
            result+=left[index_left:]
            break

    return result

#遞歸拆分?jǐn)?shù)組
def merge_sort(array):

    if len(array) < 2:
        return array

    midpoint = len(array) // 2

    return merge(left=merge_sort(array[:midpoint]),
                 right=merge_sort(array[midpoint:]))

4、快速排序


快速排序邏輯
"""
快排
"""
def quick_sort(array):

    if len(array)<2:
        return array

    low,same,high = [],[],[]

    #隨機(jī)選擇pivot元素
    pivot = array[randint(0,len(array)-1)]

    for item in array:
        if item < pivot:
            low.append(item)
        elif item == pivot:
            same.append(item)
        elif item > pivot:
            high.append(item)

    return quick_sort(low)+same+quick_sort(high)
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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