這個題也是個比較有名的面試題.當然有很多變種.
題目意思基本是:從乙個資料量很大的陣列裡找前n大的元素.不允許排序.
這個題有兩個比較好的思路:
思路一:用快速排序的思想,是思想,不是要排序;
思路二:用最大堆的思想.
我暫時只實現了思路一,思路二我之後實現了會補上.
思路一比較簡單了.我們先用快排的思想找出第n大的數,然後帶上後面n-1個就完事了.因為後面的都比支點數大.
怎麼找第n大的數?我在之前的部落格寫過,請移步到 找第n大的數
**:
#include#include結果:/*找出第n大的數的下標
*/int choose_nth(int a, int startindex, int endindex, int
n);/*
找出前n大的數
*/void choose_max_n(int a,int startindex, int endindex, int
n);int main(int argc, char *argv)
;
intn,i;
printf(
"陣列是:\n");
int an = sizeof(a)/sizeof(int
);
for(i = 0; i < an; ++i)
printf(
"%d
",a[i]);
printf("\n
");printf(
"你想找最大的前面幾個數:");
scanf("%d
",&n);
choose_max_n(a,
0, an - 1
, n);
return0;
}void choose_max_n(int a, int startindex, int endindex, int
n)int choose_nth(int a, int startindex, int endindex, int
n)
for(; i < j; i++)
if(a[i] >midone)
}a[i] =midone;
int th = endindex - i + 1
;
if(th ==n)
else
else}}
}
陣列是:1411132
451000
99300822
189你想找最大的前面幾個數:
5最大的前n個數是:
99111
3001000
189
陣列 找出陣列的第k大的數
找出陣列的第k大的數 6,7,8,9,3,2,4,8 第3大的數是4 class solution def call self,nums,k if nums none or len nums 0 return 1 result self.qsort nums,0,len nums 1,k retur...
陣列中前k大的數
問題 程式設計之美 page139.尋找最大的k個數。方法一 通過全排序 快速排序 然後獲取前k個數即位最大的k個數。演算法複雜度 o nlogn 方法二 通過部分排序。選擇排序,氣泡排序 直接獲取前k個最大的數。演算法複雜度o n k 當k比較小的時候可以考慮 方法三 快速排序的變種。前面尋找陣列...
用SQL找出前N名
業務系統中常常會有排名的需求,考試和比賽中則更普遍了。excel 中也有個 rank 函式供排名之用,資料庫中更不例外了。如果須要找出工資最高的前三個員工工資 及其員工號 只是。前三名 的詳細含義須要準確的定義。不然查出來的可能不是想要的結果。首先。由於表中記錄數可能就少於三,查出來的記錄可能等於三...