排序
快速排序
基于辅助数组实现的快速排序
从数组中随机选择一个基准值t
将小于基准值的元素放到low中,将等于基准值的元素放到mid中,将大于基准值的元素放到high中
递归排序low数组,递归排序high数组
合并数组 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基于双指针实现的快速排序
判断排序区间是否合法
初始化左右指针
选取目标值(此处选择的是中点,也可以随机选择,但在此代码中请注意选择随机值的范围应该是[left+1, right))
使left指针指向第一个不小于目标值的元素
使right指针指向第一个不大于目标值的元素
如果left < right则交换两个指针指向的元素
python实现
go实现
归并排序
基于分治实现的归并排序
折半拆分数组,排序左半边数组,排序右半边数组
外排合并左半边数组和右半边数组
python实现
go实现
python3实现
go实现
最后更新于
这有帮助吗?