一、快速排序
快速排序(Quick Sort),又称为划分交换排序(Partition-exchange Sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要笑,然后在按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
1、快速排序过程:
① 从数列中选出一个元素,称为“基准”(pivot)。
② 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准大的摆在基准的后面(相同的数,可以放到任意一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
③ 递归(recursive)把小于基准值元素子数列和大于基准值元素的子数列排序。
递归的的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。
2、python实现过程:
这里提供两种快速排序的方式,基本思想一样,第一种是在原有列表进行操作(通过游标进行),第二种则是新建左右子列表进行存储。
# coding=utf-8
def quick_sort1(ls, start, end):
"""
快速排序-1
low 和 high 分别指向序列的头和尾
low += 1, high -= 1
在low自增过程中,直到找到大于 mid_val 的下标
在high自增减过程中,直到找到小于 mid_val 的小标
然后将这两个值交换
"""
# 递归退出条件
if start >= end:
return
low = start
high = end
mid_val = ls[low]
while low < high:
while low < high and ls[high] > mid_val:
high -= 1
ls[low] = ls[high