/*
* 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個數,排序結束 若小於...