快速排序
def quick_sort(alist): """ 快速排序(封装一层) :param alist: 待排序列表 :return: """ return _q_sort(alist, 0, len(alist)-1) def _q_sort(alist, left, right): """ 递归实现 :param alist: 列表 :param left: 左边下标 :param right: 右边下标 :return: """ if left < right: pivot = _partition2(alist, left, right) _q_sort(alist, left, pivot-1) _q_sort(alist, pivot+1, right) # 第一种实现 def _partition(alist, left, right): """ 找到分开列表的基准 """ pivotion = alist[left] while left < right: while left < right and pivotion <= alist[right]: right -= 1 if left < right: alist[left], alist[right] = alist[right], alist[left] while left < right and pivotion > alist[left]: left += 1 if left < right: alist[left], alist[right] = alist[right], alist[left] return left # 第二种实现 def _partition2(alist, left, right): pivotion = alist[left] while left < right: while left < right and alist[right] >= pivotion: right -= 1 while left < right and alist[right] < pivotion: alist[left] = alist[right] left += 1 alist[right] = alist[left] alist[left] = pivotion return left
找列表的基准的两种方法实现:
1、双指针(两边同时)
2、单指针(从后往前)

浙公网安备 33010602011771号