第一步:首先选定待排序数组当中的一个数作为基准数 第二步:定义left和right两个游标,分别位于数组的第一个和最后一个位置
第三步:让right游标先去移动,去找比当前基准数小的,找到后停止 第四步:让left游标后去移动,去找比当前基准数大的,找到后停止
第五步:left游标指向的值和right游标指向的值进行交换,循环指向三四五步,直到left和right相遇。
第六步:让相遇位置的数和基准数交换-->基准数前边的都比基准数小,后边的都比基准数大
第七步:以基准数为中间节点,拆分出左右两部分!!,重新执行上述所有程序!
#快速排序法
def partition(nums,left,right):
#left哨兵元素
key=nums[left]
while left<right:
while left<right and nums[right]>=key:
right-=1
nums[left]=nums[right]
while left<right and nums[left]<=key:
left+=1
nums[right]=nums[left]
nums[left]=key
return left
#方法一
def func(nums,start,end):
if (start==end):
return
index=partition(nums,start,end)
if index>start:
func(nums, start, index-1)
if index<end:
func(nums,index+1,end)
#方法2(非递归)
def func2(nums,start,end):
stack =[end,start]
while stack:
high=stack.pop(0)
low=stack.pop(0)
index=partition(nums,low,high)
if low<index-1:
stack.insert(0,low,)
stack.insert(0,index-1)
if high>index+1:
stack.insert(0,index+1)
stack.insert(0,high)