概要:本文主要测试了一下二分查找法和三种排序(选择、插入、冒泡),做个记录
- 二分查找
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