国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python實現常見的五種排序算法

keelii / 2049人閱讀

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

概要

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

冒泡排序(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__":
    #打印結果為:[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__":
    # 打印結果為:[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__":
    # 打印結果為:[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__":
    # 打印結果為:[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__":
    # 打印結果為:[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均可免費下載
2, github源文件地址
3,北大公開課 算法設計與分析 屈婉玲教授
4,數據結構-浙江大學
5,算法(普林斯頓大學)

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44578.html

相關文章

  • 一個兩年Java的面試總結

    摘要:數據結構和算法樹快速排序,堆排序,插入排序其實八大排序算法都應該了解一致性算法,一致性算法的應用的內存結構。如何存儲一個的。八大排序算法一定要手敲一遍快排,堆排尤其重要。面試是一個雙向選擇的過程,不要抱著畏懼的心態去面試,不利于自己的發揮。 前言 16年畢業到現在也近兩年了,最近面試了阿里集團(菜鳥網絡,螞蟻金服),網易,滴滴,點我達,最終收到點我達,網易offer,螞蟻金服二面掛掉,...

    anRui 評論0 收藏0
  • 五種最大公約數Python求解總結

      小編寫這篇文章的主要目的,主要是給大家講解一下,關于最大公約數的求解方法,下面小編集中給大家總結一下,具體操作的五種方法。  方法一:短除法  短除法是求最大公因數的一種方法,也可用來求最小公倍數。求幾個數最大公因數的方法,開始時用觀察比較的方法,即:先把每個數的因數找出來,然后再找出公因數,最后在公因數中找出最大公因數。后來,使用分解質因數法來分別分解兩個數的因數,再進行運算。之后又演變為短...

    89542767 評論0 收藏0
  • this五種指法

    摘要:中只有的作用域是動態作用域的五種綁定初學時,會想當然認為遵循某一條規律,就像物理學那樣,然而并不是。的綁定分為五種情況,這五種情況之間毫無規律可言。以至指向更加撲朔迷離。 this 到底指向哪里 以下如果沒提及,則為嚴格模式。 js中作用域有兩種: 詞法作用域 動態作用域 詞法作用域 詞法作用域指在書寫代碼時就被確定的作用域。看如下代碼 var value = 1; ...

    Caizhenhao 評論0 收藏0
  • 未來五年內將重塑大數據技術五種趨勢

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

    learn_shifeng 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<