線性選擇 求n個數中第k小數

2021-04-14 04:58:21 字數 606 閱讀 8951

#include

#include

#include

template

int partition(type a,int p,int r)

a[p]=a[j];

a[j]=x;

return j;

}template

int randamizedpartition (type a,int p,int r)

template < class type>

type randamizedselect(type a,int p,int r,int k)

for(int i=0;i<=(r-p-4)/5;i++)

//將a[p+5*i]至a[p+5*i+4]的第三小元素與a[p+i]交換位置;

type x=selexr)a,p,p+(r-p-4)/5,(r-p-4).10;

int i=partition(a,p,r,x),j=i-p+1;

if(k<=j)

return select(a,p,i,k);

else return select(n,i+1,r,k-j);

void main()

;cout<}

分治法 線性時間選擇(求第k小數)

給定線性序集中n個元素和乙個整數k,1 k n,要求找出這n個元素中第k小的元素,這裡給定的線性集是無序的 線性時間選擇隨機劃分法可以模仿隨機化快速排序演算法設計。基本思想是對輸入陣列進行遞迴劃分,與快速排序不同的是,它只對劃分出的子陣列之一進行遞迴處理。利用隨機函式產生劃分基準,將陣列a p r ...

N個數,求第K大數

有n個不重複的數,這n個數可以放入記憶體中,讓你用最快的方法找到第k大的數。解答 一般情況我們可能考慮,先將n個數排序 快排序 堆排序 然後可以得到結果。但是當n很大時這樣做的效率會很低。所以我們提出一種更高效的方法 利用快速排序的特點 第一遍排序會確定乙個數的位置,這個數左邊都比它大,右邊都比他小...

N個數,求第K大數

今天同學給我出了一道題是這樣的 有n個不重複的數,這n個數可以放入記憶體中,讓你用最快的方法找到第k大的數。解答 一般情況我們可能考慮,先將n個數排序 快排序 堆排序 然後可以得到結果。但是當n很大時這樣做的效率會很低。所以我們提出一種更高效的方法 利用快速排序的特點 第一遍排序會確定乙個數的位置,...