排序法

二分法

# 遞歸
lst = [2, 3, 5, 10, 15, 16, 18, 22, 26, 30, 32, 35, 41, 42,
       43, 55, 56, 66, 67, 69, 72, 76, 82, 83, 88]


def func(num, left, right):
    if left <= right:
        mid = (right + left) // 2
        if lst[mid] > num:
            right = mid - 1
            return func(num, left, right)
        if lst[mid] < num:
            left = mid + 1
            return func(num, left, right)
        if lst[mid] == num:
            print("找到此數字")
            return mid
    else:
        print("列表中沒有此數字")
        return -1

func(69, 0, len(lst)-1)

# 循環
left = 0
right = len(lst) - 1
num = int(input("請輸入查找的數字:"))
while left <= right:
    mid = (left + right)//2
    if lst[mid] < num:
        left = left + 1
    if lst[mid] > num:
        right = right -1
    if lst[mid] == num:
        print("找到此數字")
        break
else:
    print("列表中沒有次數字")
二分法

冒泡排序法

lst = [666, 555, 444, 333, 2, 1]
n = 0  # 用於比較是否完成(len(lst)-1)!此交換
m = 1  # 用於每輪比較都比上上輪少一次
sum = 0  # 比較循環的總數
l = 1  # 計算循環的總數
k = 0  # k 與 k+1 位置的比較交換
while l < len(lst):  # sum爲須要交換的最屢次數=(len(lst)-1)!
    sum = sum + l
    l += 1

while n < sum:
    while k < len(lst) - m:
        # 第一輪須要比較len(lst)-1次,下一輪須要比較len(lst)-2次.以此類推
        if lst[k] > lst[k + 1]:
            lst[k], lst[k + 1] = lst[k + 1], lst[k]
            k += 1             # 大於交換 k+1
        else:
            k += 1  # 小於或等於不變 k+1
        n += 1      # 循環次數加1
    m += 1          # 下一輪的比較次數減一次  len(lst) - m
    k = 0           # k置零從頭開始比較冒泡
print(lst)
冒泡

 快排

def quicksort(list):
    if len(list) < 2:
        return list
    else:
        mid_num = list[0]
        large_num = [i for i in list[1:] if i > mid_num]
        sm_num = [i for i in list[1:] if i <= mid_num]
        result = quicksort(sm_num) + [mid_num] + quicksort(large_num)
        return result
相關文章
相關標籤/搜索