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