思想方法與思考過程:
快速排序對主元的劃分決定了其執行時間,如果最壞是ο(nlgn),那麼就不允許出現極端劃分情況。因為我們學習了最壞時間了線性的選擇演算法,我們何不利用其每次選擇都選中位數作為主元的方法來避免極端情況的發生?既然每次都選擇中位數作為主元,那麼其遞迴執行時間總是t(n)=2t(n/2)+ο(n) 這樣根據主方法case 2 知道t(n)=ο(nlgn)。
完整**與詳細解釋:
#include #include using namespace std;
const n=100;
//建立乙個裝有陣列a以每5個元素為1組共n/5組,每組的中位數放入到陣列b中,組成一組含有n/5個中位數的陣列b
int find(int a[n],int p,int r);//遞迴當前陣列a中從p到r個元素,以找到輔助中位數陣列b的中位數。
int partition(int a,int p,int r,int t)//t代表中位數陣列b中的中位數,這裡t代表為主元。
int t=find(a,p,r);//返回的t代表輔助陣列b的中位數。
int q=partition(a,p,r,t);
int k=q-p+1;
if (i==k)
else if(it+p&&a[i-1]t(n)=o(nlgn)
{ if (p
最壞情況為線性時間的選擇演算法
輸入 一系列數a 0 a n 1 和乙個整數k 輸出 這列數中第k小的數 同樣的問題在上篇文章中用快速排序模型,我們得到的平均時間複雜度是o n 但是遺憾的是最壞情況會達到o n 2 這篇文章中我們還是使用快速排序的模型,但是改變了劃分的方式,這個演算法會保準得到乙個很好的劃分。將該演算法叫做sel...
最壞情況為線性時間的選擇演算法
題目 在n個元素的無序陣列中選擇第k 1 k n 小元素。當k 1時,相當於找最小值。當k n時,相當於找最大值。當k n 2時,稱中值。要求 線性時間內完成,即o n 演算法解析 通過執行下列步驟,演算法select可以確定乙個有n 1個不同元素的輸入陣列中第i小的元素。如果n 1,則select...
php程式執行時間 php計算程式的執行時間
首先我們分析一下原理,要想得到程式執行時間,那麼可以在程式最開始執行的時候定義乙個變數記下當前時間,然後等我們程式執行完之後再記錄一下當前的時間,兩者相差就是該程式執行花費的時間了。這裡介紹一下 microtime 這個函式,microtime 用的不多,但是不能不知道這個函式,它是返回當前 uni...