Top K問題 基於快速排序

2021-07-10 18:39:14 字數 509 閱讀 5951

/*

* p為待查詢陣列,l,r分別為陣列下標,k表示第k大數

* */

public

intfindkth(int p,int l,int r,int k)

/** 一次快速排序

*以p[l]為比較物件,比p[l]大或等於的在其左邊,否則在其右邊

*/public

intquicksort(int p ,int l,int r)

while(i < j && p[i] > temp) i++;

if(i < j)

}

p[i] = temp;

//去掉以下兩句注釋,再將return注釋掉,並且將返回值改為void,

//就是乙個完整的快速排序

//quicksort(p ,l,i-1);

//quicksort(p ,i+1,r);

return i;

}

基於快速排序的TOPK演算法

類似於快速排序,首先選擇乙個劃分元,如果這個劃分元的序號index剛好等於k,那麼這個劃分元以及左邊的數,剛好組成了top k small data 如果index k,那top k small data在index的左邊,那麼就繼續遞迴從index 1和數中選取top k.如果index k,那麼...

快速選擇問題(top k問題)

找到乙個陣列中第k大的資料 使用分治法,參考快速排序的思想,找原陣列中找到乙個樞紐元pivot,將陣列分為s1,pivot,s2 s1中的資料都是小於pivot,s2中的資料都是大於pivot 如果pivot 就是第k個陣列,直接返回 如果s1中資料多於k,第k個資料存在於s1,遞迴呼叫s1 如果k...

演算法思考 topk問題堆排序 快速排序比較

快速排序求解 這種演算法利用了快速排序的主要思想 每次呼叫快速排序的partition函式後將會得出乙個數n的最終位置,比較n及其右邊所有數的總個數與目標個數k 若大於k,則對數n右邊的數構成的陣列呼叫partition函式 若等於k,則說明n及其右邊的數就是我們想要得到的那k個數,排序結束 若小於...