某筆試題:記憶體中有乙個長陣列,有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...