中位數與第K小元素

2021-10-01 18:12:58 字數 874 閱讀 5428

演算法實際上是模仿快速排序演算法設計出來的,其基本思想也是對輸入陣列進行遞迴劃分,與快速排序不同的是,它只對劃分出來的子陣列之一進行遞迴處理;

int randompartition(int a,int l,int

r) tmp=a[i];a[i]=a[r];a[r]=tmp;

return

i;}

randompartition產生的劃分基準是隨機的,在這個條件下,可以證明演算法randomselect可以在o(n)平均時間內找出n個輸入元素的第k小元素。

消除randomselect尾遞迴的演算法如下:

1

int randomselect(int a,int l,int r,intk)2

17}18return ((ra[l]:a[r]);

19 }

解決演算法與資料結構實驗題10.1神諭者:

1

2 #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

view code

中位數與第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小的線性選擇演算法,由於翻譯水平有限,感覺對上文不是很滿意。不過中位數演算法的大致意思我想已經在上文中說的比較清楚了,在這我就不多說了。本文的主要目的是對於演算法的實現。最近抽了些時間把該演算法做了,基本是按照上文的思路走的。突然心情激動了一下,就想把 貼上來,主要目的還...