問題畫出來小於區域和等於區域,劃偏
[1,2,3,4,5,6,7]-> [<7 7] ->總拿最後乙個劃分,跟資料狀況有關,比較差的蛻變程o(n^2)
[6,5,4,3,2,1] ->[=1,>1] -> 資料分布比較差
比價好的情況[ , =x ,] t(n) = 2t(n/2) + o(n) n(nlogn)
隨機快速排序(隨機選擇乙個數和最後乙個替換一下),長期期望複雜度o(nlogn)
隨機快速排序 時間複雜度(nlogn) 空間複雜度o(logn) 列表分為多少次,斷點多少次,二叉樹的高度
隨機快速排序初始並不是一定要按照最優乙個位置元素作為num,而是隨機選取乙個數
def partition(l,l,r):
"""l[r] 最後乙個數
r 最後乙個位置索引
"""less = l - 1
more = r
while l < more:
if l[l] < l[r]:
less +=1
swap(l,less,l)
l +=1
elif l[l] > l[r]:
more -=1
swap(l,more,l)
else:
l+=1
swap(l,more,r)
return [less+1,more]
def swap(l,i,j):
tmp = l[i]
l[i] = l[j]
l[j] = tmp
def quicksort(l,l,r):
import random
if l < r:
swap(l,l+int(random.random()*(r-l+1)),r)
p = partition(l,l,r)
quicksort(l,l,p[0]-1)
quicksort(l,p[1]+1,r)
l = [1,3,6,8,5,9,0]
quicksort(l,0,len(l)-1)
快速排序和隨機快速排序
嚴書上的快排是以最左邊元素為樞紐的,如下 include include using namespace std intpartition int a,int left,int right a left p return left void quicksort int a,int left,int ...
快速排序與隨機快速排序
實現對陣列的普通快速排序與隨機快速排序。1 實現上述兩個演算法 2 統計演算法的執行時間 3 分析效能差異,作出總結 一 快速排序 通過使用分治思想對快速排序演算法進行描述。下面對乙個典型的子陣列a p r 進行快速排序的三步分治過程 分解 陣列a p r 被劃分為兩個 可能為空 子陣列a p q ...
快速排序的改進 隨機快速排序
快速排序是一種高效的排序方法,但是如果我們的輸入陣列是排好序的乙個陣列,快速排序的執行時間就會變成o n 2 雖然這種情況很少會出現,但我們還是應該避免。演算法導論書籍中的修改方法 在排序方法中隨機化選取主元。根據計算,改進後的方法時間複雜度的期望為o nlgn 下面是改進後的 快速排序 publi...