成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python實(shí)現(xiàn)常見(jiàn)的五種排序算法

keelii / 2063人閱讀

摘要:概要算法理論講解有專業(yè)的書(shū)籍和視頻資源,本篇文章主要展示算法排序的語(yǔ)言描述,具體講解的資源地址參見(jiàn)文末參考引用冒泡排序冒泡排序打印結(jié)果為選擇排序選擇排序打印結(jié)果為插入排序插入排序打印結(jié)果為歸并排序歸并排序分歸并排序治打印結(jié)果為

概要

算法理論講解有專業(yè)的書(shū)籍和視頻資源,本篇文章主要展示算法排序的python語(yǔ)言描述,具體講解的資源地址參見(jiàn)文末參考引用

冒泡排序(Bubble Sort)
# 冒泡排序
def bubbleSort(seq=None, reversed=False):
    lens = len(seq)
    for i in range(lens):
        for j in range(lens - i - 1):
            if (seq[j] < seq[j + 1] if reversed else   seq[i] > seq[j]):
                seq[j], seq[j + 1] = seq[j + 1], seq[j]
    return seq

if __name__=="__main__":
    #打印結(jié)果為:[15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
    print(bubbleSort([10, 1, 3, 5, 7, 9, 2, 4, 6, 8, 11, 15, 0, 12, 14, 13],True))
選擇排序(Selection Sort)
# 選擇排序
def selectionSort(seq=None, reversed=False):
    lens = len(seq)
    for i in range(lens):
        min_index = i
        for j in range(i + 1, lens):
            if (seq[min_index] < seq[j] if reversed else   seq[i] > seq[j]):
                min_index = j
        seq[i], seq[min_index] = seq[min_index], seq[i]
    
    return seq


if __name__ == "__main__":
    # 打印結(jié)果為:[15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
    print(selectionSort([10, 1, 3, 5, 7, 9, 2, 4, 6, 8, 11, 15, 0, 12, 14, 13], True))
插入排序(Insertion Sort)
# 插入排序
def insertionSort(seq=None, reversed=False):
    lens = len(seq)
    for i in range(1, lens):
        key = seq[i]
        j = i
        while j > 0 and (seq[j - 1] < seq[j] if reversed else    seq[j - 1] > seq[j]):
            seq[j], seq[j - 1] = seq[j - 1], seq[j]
            j -= 1
    
    return seq


if __name__ == "__main__":
    # 打印結(jié)果為:[15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
    print(insertionSort([10, 1, 3, 5, 7, 9, 2, 4, 6, 8, 11, 15, 0, 12, 14, 13], True))
歸并排序(Selection Sort)
# 歸并排序(分)
def mergeSort(seq):
    if len(seq) < 2:
        return seq
    mid = len(seq) // 2
    left = mergeSort(seq[:mid])
    right = mergeSort(seq[mid:])
    return merge(left, right)


# 歸并排序(治)
def merge(left, right):
    if not len(left) or not len(right):
        return left or right
    result = []
    i, j = 0, 0
    
    while (len(result) < len(left) + len(right)):
        if left[i] < right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1
        if i == len(left) or j == len(right):
            result.extend(left[i:] or right[j:])
            break
    return result


if __name__ == "__main__":
    # 打印結(jié)果為:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
    print(mergeSort([10, 1, 3, 5, 7, 9, 2, 4, 6, 8, 11, 15, 0, 12, 14, 13]))
快速排序(Selection Sort)
# 快速排序
def quickSort(seq, start, end):
    if start < end:
        split = partition(seq, start, end)
        quickSort(seq, start, split - 1)
        quickSort(seq, split + 1, end)
    return seq


def partition(seq, start, end):
    pivot_index = start - 1
    for i in range(start, end):
        # 選擇最右邊的為pivot
        if seq[i] < seq[end]:
            pivot_index += 1
            seq[pivot_index], seq[i] = seq[i], seq[pivot_index]
    seq[end], seq[pivot_index + 1] = seq[pivot_index + 1], seq[end]
    return pivot_index + 1


if __name__ == "__main__":
    # 打印結(jié)果為:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
    print(quickSort([10, 1, 3, 5, 7, 9, 2, 4, 6, 8, 11, 15, 0, 12, 14, 13], 0, 15))
參考引用

1, sole learn,ios、android均可免費(fèi)下載
2, github源文件地址
3,北大公開(kāi)課 算法設(shè)計(jì)與分析 屈婉玲教授
4,數(shù)據(jù)結(jié)構(gòu)-浙江大學(xué)
5,算法(普林斯頓大學(xué))

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/44578.html

相關(guān)文章

  • 一個(gè)兩年Java的面試總結(jié)

    摘要:數(shù)據(jù)結(jié)構(gòu)和算法樹(shù)快速排序,堆排序,插入排序其實(shí)八大排序算法都應(yīng)該了解一致性算法,一致性算法的應(yīng)用的內(nèi)存結(jié)構(gòu)。如何存儲(chǔ)一個(gè)的。八大排序算法一定要手敲一遍快排,堆排尤其重要。面試是一個(gè)雙向選擇的過(guò)程,不要抱著畏懼的心態(tài)去面試,不利于自己的發(fā)揮。 前言 16年畢業(yè)到現(xiàn)在也近兩年了,最近面試了阿里集團(tuán)(菜鳥(niǎo)網(wǎng)絡(luò),螞蟻金服),網(wǎng)易,滴滴,點(diǎn)我達(dá),最終收到點(diǎn)我達(dá),網(wǎng)易o(hù)ffer,螞蟻金服二面掛掉,...

    anRui 評(píng)論0 收藏0
  • 五種最大公約數(shù)Python求解總結(jié)

      小編寫這篇文章的主要目的,主要是給大家講解一下,關(guān)于最大公約數(shù)的求解方法,下面小編集中給大家總結(jié)一下,具體操作的五種方法?! 》椒ㄒ唬憾坛ā 《坛ㄊ乔笞畲蠊驍?shù)的一種方法,也可用來(lái)求最小公倍數(shù)。求幾個(gè)數(shù)最大公因數(shù)的方法,開(kāi)始時(shí)用觀察比較的方法,即:先把每個(gè)數(shù)的因數(shù)找出來(lái),然后再找出公因數(shù),最后在公因數(shù)中找出最大公因數(shù)。后來(lái),使用分解質(zhì)因數(shù)法來(lái)分別分解兩個(gè)數(shù)的因數(shù),再進(jìn)行運(yùn)算。之后又演變?yōu)槎?..

    89542767 評(píng)論0 收藏0
  • this五種指法

    摘要:中只有的作用域是動(dòng)態(tài)作用域的五種綁定初學(xué)時(shí),會(huì)想當(dāng)然認(rèn)為遵循某一條規(guī)律,就像物理學(xué)那樣,然而并不是。的綁定分為五種情況,這五種情況之間毫無(wú)規(guī)律可言。以至指向更加撲朔迷離。 this 到底指向哪里 以下如果沒(méi)提及,則為嚴(yán)格模式。 js中作用域有兩種: 詞法作用域 動(dòng)態(tài)作用域 詞法作用域 詞法作用域指在書(shū)寫代碼時(shí)就被確定的作用域??慈缦麓a var value = 1; ...

    Caizhenhao 評(píng)論0 收藏0
  • 未來(lái)五年內(nèi)將重塑大數(shù)據(jù)技術(shù)五種趨勢(shì)

    摘要:所謂大數(shù)據(jù)及其相關(guān)技術(shù)在經(jīng)歷了高度重視詳細(xì)甄別以及吐故納新之后,實(shí)際成果很可能與我們的認(rèn)知存在較大差異。他們將探討與大數(shù)據(jù)相關(guān)的各類話題,內(nèi)容涵蓋對(duì)抗販賣人口未來(lái)發(fā)展方向乃至人工智能前沿技術(shù)。 請(qǐng)大家不要再糾結(jié)于一塊磁盤能保存多少數(shù)據(jù)或者企業(yè)到底會(huì)不會(huì)采用Hadoop。關(guān)于大數(shù)據(jù)的真正問(wèn)題在于,企業(yè)用戶將如何使用Hadoop、我們的系統(tǒng)到底能在智能化道路上走多遠(yuǎn)、我們又該如何保證這一切都處于...

    learn_shifeng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<