快速排序算法(python版本)


實現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)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM