常用算法模板

快速排序

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
posted @ 2024-11-02 12:49  清澈的澈  阅读(1)  评论(0编辑  收藏  举报