“常用公式”在线计算,“设计手册”在线查询
题目:输入n 个整数,输出其中最小的k 个。例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小的4 个数字为1,2,3 和4。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 支持支持 反对反对

共 1 个关于本帖的回复 最后回复于 2013-8-16 10:45

沙发
陈荣莲 八品司务 发表于 2013-8-16 10:45:08 | 只看该作者
研发埠培训中心
This isa very traditional question...O(nlogn): cat I_FILE | sort -n | head -n KO(kn): do insertion sort until k elements are retrieved.O(n+klogn): Take O(n) time to bottom-up build a min-heap. Then sift-down k-1times.So traditional that I don’t want to write the codes...Only gives the siftup and siftdown function./***@paramithe index of the element in heap a[0...n-1] to be sifted upvoid siftup(int a[], int i, int n) {  while (i>0) {    int j=(i&1==0 ? i-1 : i+1);    int p=(i-1)>>1;    if (j<n && a[j]<a) i = j;    if (a < a[p]) swap(a, i, p);    i = p;  } }void siftdown(int a[], int i, int n) {   while (2*i+1<n){    int l=2*i+1;    if (l+1<n && a[l+1] < a[l]) l++;    if (a[l] < a) swap(a, i, l);    i=l;  }}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注我们

360网站安全检测平台