6.歸并排序

1.介紹
歸并排序,是創(chuàng)建在歸并操作上的一種有效的排序算法。算法是采用分治法(Divide and Conquer)的一個(gè)非常典型的應(yīng)用,且各層分治遞歸可以同時(shí)進(jìn)行。歸并排序思路簡(jiǎn)單,速度僅次于快速排序,為穩(wěn)定排序算法,一般用于對(duì)總體無序,但是各子項(xiàng)相對(duì)有序的數(shù)列。

2.歸并排序示意圖:


歸并排序

3.代碼實(shí)現(xiàn)

def merge_sort(list):
    if len(list)<=1:
        return list
    
    middle = len(list)//2
    left = merge_sort(list[:middle])
    right = merge_sort(list[middle:])
    #這三行代碼就已經(jīng)實(shí)現(xiàn)了分
    print("--------------------------------")
    print(left,right)
    result = []
    #新建一個(gè)臨時(shí)的列表用于存放結(jié)果
    i = j = 0
    while (i<len(left) and j<len(right)):
        if (left[i] < right[j]):
            result.append(left[i])
            i = i +1
        else:
            result.append(right[j])
            j = j + 1
    #誰小誰扔進(jìn)去result里
    else:
        if(i==len(left)):
            for k in range(j,len(right)):
                result.append(right[k])
        else:
            for k in range(i,len(left)):
                result.append(left[k])
    #當(dāng)有一邊全扔進(jìn)去時(shí),另一邊按順序扔進(jìn)去
    print(result)
    return result
    #為什么每有兩個(gè)就會(huì)進(jìn)行合并

a = [2, 6, 10, 3, 5, 8, 4,11,12,13,14,15,16,17,18,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]
print(merge_sort(a))
?著作權(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)容