一、冒泡排序
# 冒泡排序
# 比较相邻两个元素a、b,若a>b则交换位置,一轮过后,最大值将排在列表最后
# 重复操作剩余的元素,直至排序完成
li = [23, 50, -3, 45, 0, 245, 1, -63]
def bubble_sort(li):
for i in range(len(li)-1):
for j in range(1, len(li)-i):
if li[j-1] > li[j]:
li[j-1], li[j] = li[j], li[j-1]
return li
二、选择排序
# 选择排序
# 第一轮,在未排序列表中找到最小元素,放在列表第一位
# 重复操作剩余元素
li = [23, 50, -3, 45, 0, 245, 1, -63]
def select_sort(li):
for i in range(len(li)-1):
min = i # 存放最小元素的下标
for j in range(i+1, len(li)):
if li[j] < li[min]:
min = j
li[i], li[min] = li[min], li[i]
return li
三、插入排序
# 插入排序
# 第一轮:将第一个元素a看为已排序列表,取出下一个元素b,从后往前扫描,若b小于a,则将a后移一位,直至b>a,将b插入到a后
# 重复此操作,直至所有元素均已完成排序
li = [23, 50, -3, 45, 0, 245, 1, -63]
def insert_sort(li):
for i in range(1, len(li)):
x = li[i] # 待排序的元素
index = i # 待排序元素插入位置
for j in range(i-1, -1, -1):
if x < li[j]:
li[j+1] = li[j]
index = j
else:
break
li[index] = x
return li
四、快排
# 快排
# 指定列表中任意一个数为基准数,将小于基准数的所有元素放在左边,大于基准数的所有元素放在右边
# 对左右区间进行递归操作
li = [23, 50, -3, 45, 0, 245, 1, -63]
def quick_sort(li):
if len(li) <= 1:
return li
else:
x = li[0] # 基准数
llist = [i for i in li[1:] if x > i] # 找出所有小于基准数的元素组成一个列表
rlist = [i for i in li[1:] if x < i] # 找出所有大于基准数的元素组成一个列表
return quick_sort(llist) + [x] + quick_sort(rlist)
五、二分查找算法(有序列表)
li = [-63, -3, 0, 1, 23, 45, 50, 245]
# 二分查找算法
def binary_search(li, item, left, right):
if left > right:
return None
mid = (left+right)//2
if item == li[mid]:
return mid
elif item < li[mid]:
return binary_search(li, item, left, mid-1)
else:
return binary_search(li, item, mid+1, right)
if __name__ == "__main__":
print(li)
print(binary_search(li, 23, 0, len(li)-1))