(2018-04-22.Python從Zero到One)六、排序與搜索__6.1.6歸并排序

歸并排序

歸并排序是采用分治法的一個非常典型的應(yīng)用。歸并排序的思想就是先遞歸分解數(shù)組,再合并數(shù)組。

將數(shù)組分解最小之后,然后合并兩個有序數(shù)組,基本思路是比較兩個數(shù)組的最前面的數(shù),誰小就先取誰,取了后相應(yīng)的指針就往后移一位。然后再比較,直至一個數(shù)組為空,最后把另一個數(shù)組的剩余部分復(fù)制過來即可。

歸并排序的分析

day27_排序與搜索-01.gif
def merge_sort(alist):
    if len(alist) <= 1:
        return alist
    # 二分分解
    num = len(alist)/2
    left = merge_sort(alist[:num])
    right = merge_sort(alist[num:])
    # 合并
    return merge(left,right)

def merge(left, right):
    '''合并操作,將兩個有序數(shù)組left[]和right[]合并成一個大的有序數(shù)組'''
    #left與right的下標(biāo)指針
    l, r = 0, 0
    result = []
    while l<len(left) and r<len(right):
        if left[l] < right[r]:
            result.append(left[l])
            l += 1
        else:
            result.append(right[r])
            r += 1
    result += left[l:]
    result += right[r:]
    return result

alist = [54,26,93,17,77,31,44,55,20]
sorted_alist = mergeSort(alist)
print(sorted_alist)

時間復(fù)雜度

  • 最優(yōu)時間復(fù)雜度:O(nlogn)
  • 最壞時間復(fù)雜度:O(nlogn)
  • 穩(wěn)定性:穩(wěn)定
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 搞懂基本排序算法 上篇文章寫了關(guān)于 Java 內(nèi)部類的基本知識,感興趣的朋友可以去看一下:搞懂 JAVA 內(nèi)部類;...
    醒著的碼者閱讀 1,315評論 3 4
  • 概述:排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,826評論 0 15
  • 概述 排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    蟻前閱讀 5,301評論 0 52
  • 怕你飛遠(yuǎn)去、怕你離我而去、更怕你永遠(yuǎn)停留在這里 看你飛遠(yuǎn)去、看你離我而去、原來你生來就屬于天際 夜里、輾轉(zhuǎn)反側(cè)的愁
    _824f閱讀 265評論 0 0
  • 千載變幻無停留,今朝對酒飲思守。 樓臺迷醉在歌舞升平中,繁華的城市窩藏著多少落寞孤寂的心。曾經(jīng)的曾經(jīng),喧囂的都城和...
    陶矜悠閱讀 510評論 1 7

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