實現python**如下:
import syssys.setrecursionlimit(100000) #設定遞迴的最大限制次數為100000次from cal_time import *import random
#遞迴partition函式
def partition(li,left,right):
tmp=li[left]
while left
while left=tmp:#第一步:找右邊比左邊tmp小的數,移動右邊index
right=right-1 #往左走一步
li[left]=li[right]#第二步:把右邊的數寫到左邊的位置上來
#print(li,"right")
while left#第三步:找左邊比起大的數,移動左邊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
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),因為每次相當於至只少乙個數,會使得遞迴次數很大
當然可以進行優化,讓第乙個元素和裡面的任意元素進行交換,便可以實現正常的排列演算法。
快速排序(Python版本)
快速排序 python版本 這裡是一段防爬蟲文字,請讀者忽略。本文原創首發於csdn,作者idys 部落格首頁 先從數列中取出乙個數作為基準數。分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。再對左右區間重複第二步,直到各區間只有乙個數。0 1234 5678 97065...
快速排序的python版本
快速排序屬於分治演算法中最經典的乙個例項,不同於氣泡排序和選擇排序,快排的思想是選定乙個基準元素,根據該元素對列表進行初步排序,選出比該元素小的排在該元素之前,比該元素大的排在其後,然後,在對這兩組元素進行遞迴排序。關於快排的結構,書本上大致分為兩類,單向快排和雙向快排。演算法導論介紹的快排屬於單向...
Python 快速排序演算法
快速排序 空間複雜度為o log n 時間複雜度為 o n log n o n 2 演算法不穩定,不具有適應性 1 從序列中取出乙個數作為基準數 2 分割槽,比基準數大的放基準數右邊,小的放左邊 3 遞迴,重複第二步操作,直到基準數的左邊和右邊分別只剩乙個數 演算法的穩定性是指 對於待排序的序列中,...