void
quick_sort
(vector<
int> vct,
int left,
int right)
while
(vct[l]
<=key && l
if(l
swap
(vct[l]
,vct[r]);
}swap
(vct[l]
,vct[left]);
quick_sort
(vct, left, l-1)
;quick_sort
(vct, l+
1, right)
;}
最差情況: 已排好序(正序/逆序), 一側已無可分, 一次小1,需比較o(n)次, n*o(n)=o(n^2)
平均情況: 按左右均等裂變, 一次裂變(縮範圍1個)需比較o(n)次, 裂變n個需log2(n)次, log2(n) * o(n)=o(log(n)*n)
精準計算: 參考知乎
↑最差情況
↑1:3分情況
計算時間複雜度的精確解時用到的調和平均數(harmonic number)
至此認為調和數發散
尤拉給出的值hn≈ln(n)+c, 尤拉常數值:c≈0.57721566490153286060651209
快排與堆排
本文複習一下快速排序和堆排序 2 種排序演算法 為了多快好省地刷 leetcode 主要思想 通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。時間複...
調和數列問題
題目描述 演算法訓練 調和數列問題 時間限制 1.0s 記憶體限制 512.0mb 問題描述 輸入乙個實數x,求最小的n使得,1 2 1 3 1 4 1 n 1 x。輸入的實數x保證大於等於0.01,小於等於5.20,並且恰好有兩位小數。你的程式要能夠處理多組資料,即不停地讀入x,如果x不等於0.0...
快排2 經典快排和荷蘭國旗快排
基礎知識見 建議先閱讀基礎知識,並自己手推一遍 演算法原理 第一步 取陣列最後乙個數作為num,將陣列中的 num的數放在陣列的左邊,num的數放在陣列的右邊,這是可以理解為分成了兩個陣列 第二步 然後將 num的部分當成乙個陣列,繼續第一步 num的部分同理 第三步 若陣列的大小 2,則結束。流程...