實現python代碼如下:
import sys
sys.setrecursionlimit(100000) #設置遞歸的最大限制次數為100000次
from cal_time import *
import random
#遞歸partition函數
def partition(li,left,right):
tmp=li[left]
while left<right:
while left<right and li[right]>=tmp: #第一步:找右邊比左邊tmp小的數,移動右邊index
right=right-1 #往左走一步
li[left]=li[right] #第二步:把右邊的數寫到左邊的位置上來
#print(li,"right")
while left<right and li[left]<=tmp: #第三步:找左邊比起大的數,移動左邊index
left=left+1
li[right]=li[left] #第四步 左邊移到右邊
#print(li,"left")
li[left]=tmp #把tmp歸位
return left
#快速排序算法的整體主框架函數
def _quick_sort(li,left,right):
if left<right:
mid=partition(li,left,right) #獲得所定元素應該所處的位置
_quick_sort(li,left,mid-1)
_quick_sort(li,mid+1,right)
@cal_time
def quick_sort(li):
_quick_sort(li,0,len(li)-1)
#最壞的情況,如果元素在最左邊並且右邊全是小於的元素,從大到小排序,時間復雜度變為O(n2),因為每次相當於至只少一個數,會使得遞歸次數很大
當然可以進行優化,讓第一個元素和里面的任意元素進行交換,便可以實現正常的排列算法。
li=list(range(1000,0,-1))
quick_sort(li)