1. 程式人生 > >【Python學習筆記】-冒泡排序、插入排序、二分法查找

【Python學習筆記】-冒泡排序、插入排序、二分法查找

判斷 tail fontsize watermark encoding middle 循環 itl 要求

原文出處:https://blog.csdn.net/yort2016/article/details/68065728

冒泡排序

主要是拿一個數與列表中所有的數進行比對,若比此數大(或者小),就交換位置

#encoding:utf-8
l=[5,3,6,2,1,4,8,7,9]
for j in range(len(l)-1):
    if l[j] > l[j+1]:
        l[j],l[j+1] = l[j+1],l[j]
print(l)

運行上面的代碼會發現最大的已經跑到最後一個位置了,那再加一次循環,循環列表的長度的次數,就可以把所有的都排好序了

#encoding:utf-8
l=[5,3,6,2,1,4,8,7,9] for i in range(len(l)-1): for j in range(len(l)-1-i): #這裏加了個-i,目的是為了簡化循環次數,例如循環第三次的時候,後面兩個的數就已經排好序了,沒必要繼續判斷 if l[j] > l[j+1]: l[j],l[j+1] = l[j+1],l[j] print(l)

插入排序

有一個已經有序的數據序列,要求在這個已經排好的數據序列中插入一個數,但要求插入後此數據序列仍然有序
—來自百度百科
技術分享圖片

基本思想為:每步將一個待排序的紀錄,按其關鍵碼值的大小插入前面已經排序的文件中適當位置上,直到全部插入完為止。
技術分享圖片

插入排序就是用一個數與一個已排好序的序列進行比對,從右向左進行。
例:5與3進行比較,5>3,將5與3不進行交換。l=[3,5],
此時再進行排序。4 < 5 l=[3,4,5] 3<4不進行交換,l=[3,4,5]
實例:

#encoding:utf-8
l=[1,5,4,7,9,3,2,6,8]

for i in range(1,len(l)):
    for j in range(i,0,-1):
        if l[j] < l[j-1]:
            l[j],l[j-1] = l[j-1],l[j]
        else:
            
break print(l)

二分法查找

二分查找又稱折半查找,優點是比較次數少,查找速度快,平均性能好;其缺點是要求待查表為有序表,且插入刪除困難。
此方法適用於不經常變動而查找頻繁的有序列表。

首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查找關鍵字比較,如果兩者相等,則查找成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查找關鍵字,則進一步查找前一子表,否則進一步查找後一子表。重復以上過程,直到找到滿足條件的記錄,使查找成功,或直到子表不存在為止,此時查找不成功。
實例:

#encoding:utf-8
l = [1, 2, 3, 4, 5, 6, 7, 8, 9]
find_num = int(input(請輸入一個數字:))
start = 0
end = len(l) - 1

while True:
    middle = (start + end) // 2
    if find_num == l[middle]:
        print(找到了!索引是:, middle)
        break
    elif find_num > l[middle]:
        start = middle + 1
    elif find_num < l[middle]:
        end = middle - 1
    if start > end:
        print(沒找到!, find_num)
        break

【Python學習筆記】-冒泡排序、插入排序、二分法查找