快速排序
快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
代码如下
方法一
def quick_sort(li,start,end):
low = start
high = end
mid = li[low]
# print(mid)
if start >= end:
return
while low < high:
while low < high and li[high] > mid:
high -= 1
li[low] = li[high]
while low < high and li[low] < mid:
low += 1
li[high] = li[low]
li[low] = mid
# 前端递归排序
quick_sort(li,start,low-1)
# 后端递归排序
quick_sort(li,low+1,end)
if __name__ == '__main__':
li = [31, 42, 24, 56, 75, 51, 22, 65, 47, 87]
quick_sort(li,0,len(li)-1)
print(li)
方法二
def quick_sort(li):
"""快速排序"""
if len(li) < 2:
return li
# 选取基准,随便选哪个都可以,选中间的方便理解
mid = li[len(li)//2]
# 定义两个数列,left,right
left,right = [],[]
# 从原始数组中移除基准值
li.remove(mid)
for item in li:
# 大于等于基准值的放右边
if item >=mid:
right.append(item)
else:
# 小于基准的放左边
left.append(item)
# 使用迭代进行比较
return quick_sort(left) + [mid] + quick_sort(right)
if __name__ == '__main__':
li = [31, 42, 24, 56, 75, 51, 22, 65, 47, 87]
print(quick_sort(li))