演算法實際上是模仿快速排序演算法設計出來的,其基本思想也是對輸入陣列進行遞迴劃分,與快速排序不同的是,它只對劃分出來的子陣列之一進行遞迴處理;
int randompartition(int a,int l,intrandompartition產生的劃分基準是隨機的,在這個條件下,可以證明演算法randomselect可以在o(n)平均時間內找出n個輸入元素的第k小元素。r) tmp=a[i];a[i]=a[r];a[r]=tmp;
return
i;}
消除randomselect尾遞迴的演算法如下:
1解決演算法與資料結構實驗題10.1神諭者:int randomselect(int a,int l,int r,intk)2
17}18return ((ra[l]:a[r]);
19 }
1view code2 #include3
int a[50005];4
int randompartition(int a,int l,intr)5
16 tmp=a[i];a[i]=a[r];a[r]=tmp;
17return
i;18}19
int randomselect(int a,int l,int r,int
k)2035}
36return ((ra[l]:a[r]);37}
38int
main()
3946 len=n;
47for(i=0;i)
4855
return0;
5657}58
59
中位數與第K小元素
演算法實際上是模仿快速排序演算法設計出來的,其基本思想也是對輸入陣列進行遞迴劃分,與快速排序不同的是,它只對劃分出來的子陣列之一進行遞迴處理 int randompartition int a,int l,int r tmp a i a i a r a r tmp return i randompa...
中位數之第K小的線性選擇演算法(續)
前一段時間翻譯了中位數之第k小的線性選擇演算法,由於翻譯水平有限,感覺對上文不是很滿意。不過中位數演算法的大致意思我想已經在上文中說的比較清楚了,在這我就不多說了。本文的主要目的是對於演算法的實現。最近抽了些時間把該演算法做了,基本是按照上文的思路走的。突然心情激動了一下,就想把 貼上來,主要目的還...
中位數之第K小的線性選擇演算法(續)
前一段時間翻譯了中位數之第k小的線性選擇演算法,由於翻譯水平有限,感覺對上文不是很滿意。不過中位數演算法的大致意思我想已經在上文中說的比較清楚了,在這我就不多說了。本文的主要目的是對於演算法的實現。最近抽了些時間把該演算法做了,基本是按照上文的思路走的。突然心情激動了一下,就想把 貼上來,主要目的還...