常用算法模板
快速排序
def quick_sort(arr):
if len(arr) <= 1: # 基本情况:如果数组为空或只有一个元素,则返回
return arr
else:
pivot = arr[0] # 选择基准值(可以选择第一个元素)
less_than_pivot = [x for x in arr[1:] if x <= pivot] # 小于等于基准值的元素
greater_than_pivot = [x for x in arr[1:] if x > pivot] # 大于基准值的元素
# 递归排序子列表,并合并结果
return quick_sort(less_than_pivot) + [pivot] + quick_sort(greater_than_pivot)
归并排序
- 确定分界点 mid = (1+r) / 2
- 递归排序left right
- 归并 合二为一
def merge_sort(arr):
# 如果数组长度小于等于1,直接返回
if len(arr) <= 1:
return arr
# 找到数组的中间点
mid = len(arr) // 2
# 递归分割数组
left_half = merge_sort(arr[:mid])
right_half = merge_sort(arr[mid:])
# 合并已排序的子数组
return merge(left_half, right_half)
def merge(left, right):
sorted_array = []
i = j = 0
# 合并两个子数组
while i < len(left) and j < len(right):
if left[i] < right[j]:
sorted_array.append(left[i])
i += 1
else:
sorted_array.append(right[j])
j += 1
# 追加剩余元素
sorted_array.extend(left[i:])
sorted_array.extend(right[j:])
return sorted_array