Python3 查找和排序(一)

概要:本文主要測試了一下二分查找法和三種排序(選擇、插入、冒泡),做個記錄

  • 二分查找
li = [8, 11, 12, 19, 22, 25, 28, 35, 37, 39, 45]

count = 0

# 二分查找
def binary_search(seq, left, right, x):
    global count
    count = count + 1
    mid = int(left + (right - left)/2)
    if x == seq[mid]:
        return mid
    elif x < seq[mid]:
        return binary_search(seq, left, mid - 1, x)
    else:
        return binary_search(seq, mid + 1, right, x)
el = 35
index = binary_search(li, 0, len(li) - 1, el)
print('查找元素:%s,位置:%d, 共查找了%d次' % (el, index, count))

執行結果:

查找元素:35,位置:7, 共查找了4次
  • 插入排序
def insert_sort(seq):
    # 從第二個元素開始遍歷,與前面的元素進行比較
    for i in range(1, len(seq)):
        # 當前元素的值
        val = seq[i]
        # 前一個元素的索引
        j = i - 1
        # 如果當前元素的值小於之前的元素的值
        while j >= 0 and val < seq[j]:
            # 將前一個元素後移
            seq[j + 1] = seq[j]
            # 將指針遷移,取前一個元素比較
            j = j - 1
        # 比較完以後,將該位置賦值當前元素的值
        seq[j + 1] = val

li_insert = [22, 11, 25, 12, 8, 39, 28, 45, 19, 37, 35]
insert_sort(li_insert)
print('排序後的序列爲:%s' % (','.join(map(str, li_insert)),))

執行結果:

排序後的序列爲:8,11,12,19,22,25,28,35,37,39,45
  • 選擇排序
def select_sort(seq):
    # 遍歷序列
    for i in range(0, len(seq)):
        # 用於保存最小值所在是索引
        idx = i
        # 遍歷當前元素之後的序列
        for j in range(i + 1, len(seq)):
            # 當該值小於最小值索引的值,則將該索引值賦值給idx
            if seq[j] < seq[idx]:
                idx = j
        # 將當前值與最小值索引位的值交換
        seq[i], seq[idx] = seq[idx], seq[i]

li_select = [22, 11, 25, 12, 8, 39, 28, 45, 19, 37, 35]
select_sort(li_select)
print('排序後的序列爲:%s' % (','.join(map(str, li_select)),))

執行結果:

排序後的序列爲:8,11,12,19,22,25,28,35,37,39,45
  • 冒泡排序
def bubble_sort(seq):
    for i in range(0, len(seq)):
        for j in range(i + 1, len(seq)):
            if seq[i] > seq[j]:
                seq[i], seq[j] = seq[j], seq[i]


li_bubble = [22, 11, 25, 12, 8, 39, 28, 45, 19, 37, 35]
bubble_sort(li_bubble)
print('排序後的序列爲:%s' % (','.join(map(str, li_bubble)),))

執行結果:

排序後的序列爲:8,11,12,19,22,25,28,35,37,39,45
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章