欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

冒泡排序、插入排序與選擇排序(Python)

系統 1755 0

1、冒泡排序

  • 冒泡排序只會操作相鄰的兩個數據。
  • 每次冒泡操作都會對相鄰的兩個元素進行比較,看是否滿足大小關系要求。如果不滿足就讓它倆互換。
  • 一次冒泡會讓至少一個元素移動到它應該在的位置,重復 n 次,就完成了 n 個數據的排序工作。

第一次冒泡操作的詳細過程

冒泡排序、插入排序與選擇排序(Python)_第1張圖片

經過一次冒泡操作之后,6 這個元素已經存儲在正確的位置上。要想完成所有數據的排序,我們只要進行 6 次這樣的冒泡操作就行了。

冒泡排序、插入排序與選擇排序(Python)_第2張圖片

實際上,冒泡過程還可以優化。當某次冒泡操作已經沒有數據交換時,說明已經達到完全有序,不用再繼續執行后續的冒泡操作。下圖中的另外一個例子,這里面給 6 個元素排序,只需要 4 次冒泡操作就可以了。

冒泡排序、插入排序與選擇排序(Python)_第3張圖片

優化后的冒泡排序代碼如下:

            
              """
    優化的冒泡排序:
    當某次冒泡操作已經沒有數據交換時,說明已經達到完全有序,不用再繼續執行后續的冒泡操作
"""
def bubble_sort(a):
    '''   
    :param a: List[int]
    '''
    length = len(a)
    if length <= 1:
        return 

    for i in range(length):
        made_swap = False
        # 下標j + 1 最大為 length - 1
        for j in range(length-1-i):
            if a[j] > a[j+1]:
                a[j], a[j+1] = a[j+1], a[j]
                made_swap = True
        # 優化:無數據交換,結束排序操作
        if not made_swap:
                break
    return a

if __name__ == '__main__':
    a = [7,1,4,3,6,5]
    print(bubble_sort(a))
            
          

?

2、插入排序

首先,我們將數組中的數據分為兩個區間, 已排序區間 未排序區間 。初始已排序區間只有一個元素,就是數組的第一個元素。插入算法的核心思想是取未排序區間中的元素,在已排序區間中找到合適的插入位置將其插入,并保證已排序區間數據一直有序。重復這個過程,直到未排序區間中元素為空,算法結束。

如圖所示,要排序的數據是 4,5,6,1,3,2,其中左側為已排序區間,右側是未排序區間。

插入排序也包含兩種操作,一種是元素的 比較 ,一種是元素的 移動 。當我們需要將一個數據 a 插入到已排序區間時,需要拿 a 與已排序區間的元素依次比較大小 ,找到合適的插入位置。找到插入點之后,我們還需要 將插入點之后的元素順序往后移動一位 ,這樣才能騰出位置給元素 a 插入。

冒泡排序、插入排序與選擇排序(Python)_第4張圖片

代碼如下:

            
              """
    插入排序包含兩種操作,一種是元素的比較,一種是元素的移動。
    當我們需要將一個數據 a 插入到已排序區間時,需要拿 a 與已排序區間的元素依次比較大小,找到合適的插入位置。
    找到插入點之后,我們還需要將插入點之后的元素順序往后移動一位,這樣才能騰出位置給元素 a 插入。
"""
def insertion_sort(a):
    '''
    :param a: List[int]
    '''
    length = len(a)
    if length <= 1:
        return

    for i in range(1, length):
        value = a[i]
        j = i - 1
        # 查找插入位置,在前面的已排序區間,拿value與已排序區間的元素依次比較大小
        while j >= 0 and a[j] > value:
            # 數據向后移動
            a[j+1] = a[j]
            j -= 1
        # 插入數據
        a[j+1] = value

    return a

if __name__ == '__main__':
    a = [7,1,4,3,6,5]
    print(insertion_sort(a))
            
          

?

3、選擇排序

選擇排序算法的實現思路有點類似插入排序,也分已排序區間和未排序區間。但是選擇排序每次會 從未排序區間中找到最小的元素,將其放到已排序區間的末尾

冒泡排序、插入排序與選擇排序(Python)_第5張圖片

選擇排序是一種不穩定的排序算法。從圖中可以看出,選擇排序每次都要找剩余未排序元素中的最小值,并和前面的元素交換位置,這樣破壞了穩定性。 ?

比如 5,8,5,2,9 這樣一組數據,使用選擇排序算法來排序的話,第一次找到最小元素 2,與第一個 5 交換位置,那第一個 5 和中間的 5 順序就變了,所以就不穩定了。

正是因此,相對于冒泡排序和插入排序,選擇排序就稍微遜色了。

代碼如下:

            
              def selection_sort(a):
    length = len(a)
    if length <= 1:
        return

    for i in range(length):
        # i是每次已排序區間的末尾
        min_index = i
        min_val = a[i]
        # 查找未排序區間中最小的元素
        for j in range(i, length):
            if a[j] < min_val:
                # 未排序區間最小的元素
                min_val = a[j]
                min_index = j
        a[i], a[min_index] = a[min_index], a[i]

    return a

if __name__ == '__main__':
    a = [7,1,4,3,6,5]
    print(selection_sort(a))
            
          

?


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 狠狠操91| 久久久综合九色合综国产 | 欧美一级片毛片 | 国产一级毛片高清视频完整版 | 哥斯拉大战金刚2在线观看免费完整版 | 亚洲高清在线播放 | 欧美午夜艳片欧美精品 | 欧美日韩精品一区二区在线播放 | 久久精品国产99国产精品 | 三级视频网站 | 欧美精品综合 | 亚洲成人精品 | 婷婷色在线观看 | 亚洲特黄 | 亚州a| 中文字幕av一区二区三区 | 日韩城人网站 | 99爱在线精品视频免费观看9 | 欧美日韩一区二区三区免费视频 | 国产精品视频播放 | 青青草原综合网 | 精品无人区一区二区三 | 婷婷免费视频 | 古装三级在线观看 | 色屋视频| 成人av观看 | 美女操网站 | 国产精品国产三级国产播12软件 | 九九久久国产精品大片 | 羞羞色院91蜜桃在线观看 | 久久九九国产精品 | 欧美无遮挡一区二区三区 | 在线观看视频一区 | 国精品日韩欧美一区二区三区 | 久久伊人操 | 亚洲啊v在线观看 | 特级做a爰片毛片免费看一区 | 色婷婷综合久久久久中文一区二区 | 色www 永久免费网站 | 日产精品乱码卡一卡2卡三 久久99精品久久久久久综合 | 另类国产ts人妖高潮系列视频 |