没有quickSort没有Partition,仅使用一个函数递归完成快排
先上代码:
import random
lst = []
for x in range(10):
lst.append(random.randint(0, 100))
print(lst)
def quick(lst, left, right):
if left >= right:
return
i = left
j = right
pivot = lst[i]
while i < j:
while lst[j] >= pivot and i < j:
j -= 1
lst[i] = lst[j]
while lst[i] < pivot and i < j:
i += 1
lst[j] = lst[i]
lst[i] = pivot
quick(lst, left, i-1)
quick(lst, i+1, right)
quick(lst, 0, len(lst)-1)
print(lst)
殊途同归,就在一个列表上面倒腾 左右两个指针相互倒腾,这个形式的快排是我最喜欢的,好记又有规律…理解成本不高 注意,判断i的时候不能有=,因为最开始选的是pivot=lst[i],如果带等号,会进行多次相同元素的位置交换(要是觉得抽象可以去运行试一试) 觉得理解成本高的童鞋直接背一下就好了,比起划分+排序的写法好记多了。 当让也可以用手推一下。 写个博客记录一下,长时间不用容易忘还不好找,如有错误还恳请指正!侵删~
|