快排與調和數

2021-10-04 07:44:20 字數 901 閱讀 8289

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,則結束。流程...