求N個數中最大的K個數的幾種方法與實現

2021-06-08 16:10:03 字數 1012 閱讀 9509

某筆試題:記憶體中有乙個長陣列,有100w條記錄, 每個記錄為乙個struct array, sizeof( array ) = 512, 在這個struct裡有乙個int型成員變數weight, 現要取得按個weight值從大到小排序的前500個陣列單元(求n裡的前k個大的數)

直接貼**吧,廢話少講(先說方法吧)~~~~解釋在注釋裡:)

const static long n = 10000000;

const static long k = 100;

static long cnt;

struct elem

long weight;

//char data[512];

};void main()

}return change;

}void minheap( int * warray, int len )

//解法四: 如果加上限制條件(1) 所有數為整數 (2) 所有數的變化範圍不大 這樣就可以利用記數排序法的思想

//遍歷一次n, 找出最大值max

//開乙個陣列 t[max];

//再遍歷一次n, 對每個數計數 t[ a[i] ]++; ( 0<= i <= n )

//由於是求前k個最大的數,所以就可以從後面起取

void countsort( elem * src, int k )

{ long i,j;

int max;

int wt;

int * karray = new int[k];

long take = gettickcount();

//遍歷一次n, 找出最大值max

max = src[0].weight;

for( i=0; i0 ; i-- )

{ //跳過沒有的數

if( !t[i] )

continue;

if( t[i] >= n )

{ //儲存結果在另乙個陣列,以免影響計算時間

for( j =0; j

求N個數中最大的K個數的幾種方法與實現

某筆試題 記憶體中有乙個長陣列,有100w條記錄,每個記錄為乙個struct array,sizeof array 512,在這個struct裡有乙個int型成員變數weight,現要取得按個weight值從大到小排序的前500個陣列單元 求n裡的前k個大的數 直接貼 吧,廢話少講 先說方法吧 解釋...

求N個數中最大的K個數的幾種方法與實現

某筆試題 記憶體中有乙個長陣列,有100w條記錄,每個記錄為乙個struct array,sizeof array 512,在這個struct裡有乙個int型成員變數weight,現要取得按個weight值從大到小排序的前500個陣列單元 求n裡的前k個大的數 直接貼 吧,廢話少講 先說方法吧 解釋...

找出N個整數中最大的K個數

所謂 第 前 k大數問題 指的是在長度為n n k 的亂序陣列中s找出從大到小順序的第 前 k個數的問題。解法1 我們可以對這個亂序陣列按照從大到小先行排序,然後取出前k大,總的時間複雜度為o n logn k 解法2 利用選擇排序或互動排序,k次選擇後即可得到第k大的數。總的時間複雜度為o n k...