支持重复元素,理解容易,但不是原地排序方法.
代码参上
# -*- coding:utf-8 -*-
def quick_sort(list_o):
# 不可能发生的情况
if len(list_o) == 0 or list_o is None:
print("enter len 0!!it's impossile!")
return list([])
# 子列表长度为1
elif len(list_o) == 1:
return list_o
# 子列表长度为2
elif len(list_o) == 2:
if list_o[0] > list_o[1]:
list_o.reverse()
return list_o
# 子列表长度>=3
else:
# 针对很多元素重复,去重后只有2个不同元素的情况
if len(set(list_o)) == 2:
# 使用最大值最为分割
bigger = max(set(list_o))
# 针对最大值也有多个的情况
bigger_count = list_o.count(bigger)
# 将最大的元数移动到列队尾部
for i in range(bigger_count):
bigger_index = list_o.index(bigger)
should_be_index = len(list_o)-i-1
if bigger_index != should_be_index:
lis