目录
一、题目链接
二、知识点学习
知识点:快速排序+三路快速排序
学习链接:快速排序 - OI Wiki (oi-wiki.org)
三、解题代码(python)
三路快速排序+随机基准值
import random
def func(nums, start, end):
# 通过下标操作
# 闭区间
if start >= end: return
# 随机选择一个索引作为基准值
pivot_index = random.randint(start, end)
nums[start], nums[pivot_index] = nums[pivot_index], nums[start] # 将基准值交换到起始位置
base = nums[start]
'''
# 或者不进行交换
# nums[start], nums[pivot_index] = nums[pivot_index], nums[start] # 将基准值交换到起始位置
base = nums[pivot_index]
'''
m, n, k = start, start, end + 1
# k = end + 1是起始时[k, len)为空
while n < k:
if nums[n] < base:
nums[m], nums[n] = nums[n], nums[m]
m += 1
n += 1
elif nums[n] > base:
nums[k - 1], nums[n] = nums[n], nums[k - 1]
k -= 1
else:
n += 1
func(nums, start, m - 1)
func(nums, k, end)
n = int(input())
nums = list(map(int, input().split()))
func(nums, 0, len(nums) - 1)
for x in nums:
print(x, end = ' ')
完
感谢你看到这里!一起加油吧!