排序之快速排序
Posted 碎屑笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序之快速排序相关的知识,希望对你有一定的参考价值。
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比另一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,本过程利用递归已达到整个数据变成有序列表
from typing import List
import random
def quick_sort(a: List[int]):
_quick_sort_between(a, 0, len(a) - 1)
def _quick_sort_between(a: List[int], low: int, high: int):
if low < high:
# get a random position as the pivot
k = random.randint(low, high)
a[low], a[k] = a[k], a[low]
m = _partition(a, low, high) # a[m] is in final position
_quick_sort_between(a, low, m - 1)
_quick_sort_between(a, m + 1, high)
def _partition(a: List[int], low: int, high: int):
pivot, j = a[low], low
for i in range(low + 1, high + 1):
if a[i] <= pivot:
j += 1
a[j], a[i] = a[i], a[j] # swap
a[low], a[j] = a[j], a[low]
return j
if __name__ == "__main__":
a4 = [5, -1, 9, 2, -3, 7]
quick_sort(a4)
print(a4)
(此代码来源网络)以上代码的实现过程中空间复杂度为O(1)
以上是关于排序之快速排序的主要内容,如果未能解决你的问题,请参考以下文章