排序

验证排序算法

快速排序

基于辅助数组实现的快速排序

  1. 从数组中随机选择一个基准值t

  2. 将小于基准值的元素放到low中,将等于基准值的元素放到mid中,将大于基准值的元素放到high中

  3. 递归排序low数组,递归排序high数组

  4. 合并数组 low+mid+high

from random import randint


# 借助额外数组,容易理解
def quick_sort_with_help(nums: list) -> list:
    if len(nums) <= 1:
        return nums

    rd = randint(0, len(nums) - 1)

    low = list()
    mid = list()
    high = list()

    for a in nums:
        if a < nums[rd]:
            low.append(a)
        elif a > nums[rd]:
            high.append(a)
        else:
            mid.append(a)

    low = quick_sort_with_help(low)
    high = quick_sort_with_help(high)
    low.extend(mid)
    low.extend(high)
    return low

基于双指针实现的快速排序

  1. 判断排序区间是否合法

  2. 初始化左右指针

  3. 选取目标值(此处选择的是中点,也可以随机选择,但在此代码中请注意选择随机值的范围应该是[left+1, right))

  4. 使left指针指向第一个不小于目标值的元素

  5. 使right指针指向第一个不大于目标值的元素

  6. 如果left < right则交换两个指针指向的元素

python实现

go实现

归并排序

基于分治实现的归并排序

  1. 折半拆分数组,排序左半边数组,排序右半边数组

  2. 外排合并左半边数组和右半边数组

python实现

go实现

python3实现

go实现

最后更新于

这有帮助吗?