算法の LowLow三人行

lowb三人組

  • 冒泡
  • 選擇
  • 插入
  • 算法關(guān)鍵點(diǎn):有序區(qū),無序區(qū)

冒泡:

  • 首先,列表每兩個(gè)相鄰的數(shù),如果前面的比后面的大,那么交換這兩個(gè)數(shù)。
  • 關(guān)鍵點(diǎn):趟,無序區(qū)

# 如果冒泡排序中,執(zhí)行了一趟而沒有交換位置,那么它已經(jīng)是有序狀態(tài),可以直接結(jié)束算法。
def bubble_sort(li):
    for i in range(len(li)-1):
        # i代表趟
        # 第 i 趟時(shí):無序區(qū)range(len(li)-i) 
        # 因?yàn)樽詈笠粋€(gè)是固定的不需要再比較再挪動(dòng)so -1
        flag = False
        for j in range(len(li)-i-1):
            if li[j] > li[j+1]:
                li[j],li[j+1] = li[j+1],li[j]
                flag = True
        if not flag:
            return

選擇:

  • 在一堆大小不一的球中,進(jìn)行選擇(以從小到大,先選最小球?yàn)槔?。
    1. 選擇一個(gè)基準(zhǔn)球。
    2. 將剩下的球與基準(zhǔn)球比較如果小于基準(zhǔn)求,則交換位置。
    3. 第一輪過后,獲得最小的球。
    4. 執(zhí)行123步。
時(shí)間復(fù)雜度:O(n^2).  需要進(jìn)行的比較次數(shù)為第一輪 n-1,n-2....1, 總的比較次數(shù)為 n*(n-1)/2
# 與冒泡只有一點(diǎn)點(diǎn)差別
import random
def select_sort(li):
    for i in range(len(li)-1):
        min_loc = i 
        for j in range(i+1,len(li)-i-1):
            if li[j] > li[min_loc]:
                min_loc = j
            else:
                li[i],li[min_loc] = li[min_loc],li[i]

插入

  • 思路:
    1. 列表被分為有序區(qū)無序區(qū)兩個(gè)部分。最初有序區(qū)只有一個(gè)元素。
    2. 每次從無序區(qū)拿出一個(gè)元素,插入到有序區(qū)的位置,直到無序區(qū)變空。
    3. 在有序區(qū),它也會(huì)依次去比較,把最小的排在最前面位置。
  • 時(shí)間復(fù)雜度:
o(n^2)
# 思路:列表被分為有序去和無序區(qū)。最初有序區(qū)只有一個(gè)元素。
#      每次從無序區(qū)選擇一個(gè)元素,插入到有序區(qū)的位置,直到無序區(qū)變空。

from timewrap import exe_time
import random

@exe_time
def insert_sort(li):
    for i in range(1,len(li)):
        # i 是無序區(qū)第一張牌,默認(rèn)0位有序
        tmp = li[i] # tmp就是無序區(qū)的第一個(gè)元素,即摸到的牌
        j = i - 1   # 有序區(qū)的最后一個(gè)元素的索引
        while j >= 0 and tmp < li[j]:
            # j >= 0  如果沒有這句,index 會(huì) outof。
            # 因?yàn)槲乙炎钚〉闹捣旁谧钋懊妫峭ㄟ^和前面一個(gè)值比較來的位置。
            # 但是第一個(gè)元素前面沒有值了,所以只能通過判斷來讓最小的值放在索引為0的位置上。
            li[j+1] = li[j]
            j -= 1
        li[j+1] = tmp


# n 是我拿到的值,
# J 是n前面的一個(gè)值,就是要比的值。
# 其實(shí)你看似放在某某前面,但其實(shí)是放在某某某的后面。
li = list(range(100))
random.shuffle(li)
print(li)
insert_sort(li)
print(li)


到這,排序lowB三人組完結(jié)。????????????

下一篇寫快速排序
最后編輯于
?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 一、直接插入排序 直接插入排序(Insertion Sort)的基本思想是:每次將一個(gè)待排序的元素記錄,按其關(guān)鍵字...
    kevin16929閱讀 647評(píng)論 0 0
  • 該系列文章主要是記錄下自己暑假這段時(shí)間的學(xué)習(xí)筆記,暑期也在實(shí)習(xí),抽空學(xué)了很多,每個(gè)方面的知識(shí)我都會(huì)另起一篇博客去記...
    Yanci516閱讀 12,644評(píng)論 6 19
  • 原博客 1.選擇排序(Selection Sort): 選擇最小元素,移動(dòng)到首位置。 (1)算法描述和實(shí)現(xiàn): 首先...
    Gitfan閱讀 587評(píng)論 0 0
  • 一直有野牛一樣的脾氣 風(fēng)馳電掣桀驁不馴狂放不羈 連草原上的霸主不可一世的獅子 都從來不曾放在眼里 其實(shí)我沒有那么牛...
    天外來客_1a64閱讀 161評(píng)論 0 0
  • “看路” “想看你” “要命還是要我” “我要五月也要你呀”
    小七主公閱讀 183評(píng)論 11 1

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