快速排序的原理和实现基本已经是烂大街了,但是诡异的是越是烂大街的东西越难找到正常一些的code,= =。大概大家伙都是CTRL+C V就完事了,和抄作业一个道理。
没办法重拾(其实全忘了)大一的课余休闲内容,用python重新码了一遍。
#写法1:最初瞎写的
def Partition_1(ar:list, begin, end):
b = begin
begin += 1
while end > begin-1:# 注意-1,用以返回初始元素序号
if ar[end] < ar[b]:
for begin in range(begin, end+1):
if ar[begin] >= ar[b]:
ar[begin], ar[end] = ar[end], ar[begin]
break
if begin >= end: break
end -= 1
ar[b], ar[end] = ar[end], ar[b]
return end
#写法2:从写法1提炼的
def Partition_2(ar:list, begin, end):
b = begin
while end > begin:
while end > begin and ar[end] > ar[b]:
end -=1
while end > begin and ar[begin] <= ar[b]: # 注意<=,跳过标定的原始元素
begin += 1
if end <= begin:
break
ar[begin], ar[end] = ar[end], ar[begin]
ar[b], ar[end] = ar[end], ar[b]
return end
def QuickSort(ar:list, begin, end):
if end > begin:
s= Partition_2(ar, begin, end)
Partition_2(ar, begin, s-1)
Partition_2(ar, s+1, end)
array = [1, 2, 10, 6, 1]
QuickSort(array, 0, len(array)-1)
print(array)