当年写的C代码
#ifndef KMIN_H_
#define KMIN_H_
/************************************************************************/
/* min k values problem with maxheap data structure */
/* the computation cost is nlog(k) */
/*----------------------------------------------------------------------*/
/* void kmin_maxheap(Tnum * a,long int n,Tnum*b,int k) */
/* void kmin_idx_maxheap(Tnum * a,long int n,Tnum*b,int k,Tint *idx) */
/*----------------------------------------------------------------------*/
/* a is the input array of length n */
/* b stores the k maximum values */
/* idx stores the indice of entries of b corresponding to a */
/*----------------------------------------------------------------------*/
/* written by Zhao Keke. */
/* Aug 20, 2010. modified at December 15, 2010. */
/************************************************************************/
//----min k values problem by maxheap---//
template<typename Tnum>
void make_maxheap(Tnum*b,int k)
{
for (register int i=((k-1)-1)>>1;i>=0;i--){
down_maxheap(b,k,i);
}
}
template<typename Tnum>
void down_maxheap(Tnum*b,int k,int parent=0)
{
Tnum tmp;register int i,j;
i=parent;j=(i<<1)+1;
while(j+1<k){
if(b[j]<b[j+1])j++;
if(b[i]>=b[j])break;
tmp=b[i];b[i]=b[j];b[j]=tmp;
i=j;j=(j<<1)+1; // j=j*2+1;
}
if(j<k&&b[i]<b[j]){
tmp=b[i];b[i]=b[j];b[j]=tmp;
}
}
template<typename Tnum>
void sort_maxheap(Tnum*b,int k)
{
register int i;Tnum tmp;
while(k-->0){
tmp=b[0];b[0]=b[k];b[k]=tmp;
down_maxheap(b,k);
}
}
template<typename Tnum>
void kmax_maxheap(Tnum * a,long int n,Tnum*b,int k)
{
if (!(k<=n&&k>0)){return;}
for (int j=0;j<k;j++){b[j]=a[j];}
make_maxheap(b,k);
for (register long int i=k;i<n;i++)
if(a[i]<b[0]){
b[0]=a[i];
down_maxheap(b,k);
}
//we may sort the resulting array
sort_maxheap(b,k);
}
//----min k values problem with index----//
template<typename Tnum,typename Tint>
void make_maxheap_idx(Tnum*b,int k,Tint*idx){
for (register int i=((k-1)-1)>>1;i>=0;i--){
down_maxheap_idx(b,k,idx,i);
}
}
template<typename Tnum,typename Tint>
void down_maxheap_idx(Tnum*b,int k,Tint*idx,int parent=0)
{
Tnum tmp;Tint tmp_idx;register int i,j;
i=parent;j=(i<<1)+1;
while(j+1<k){
if(b[j]<b[j+1])j++;
if(b[i]>=b[j])break;
tmp=b[i];b[i]=b[j];b[j]=tmp;
tmp_idx=idx[i];idx[i]=idx[j];idx[j]=tmp_idx;
i=j;j=(j<<1)+1; // j=j*2+1;
}
if(j<k&&b[i]<b[j]){
tmp=b[i];b[i]=b[j];b[j]=tmp;
tmp_idx=idx[i];idx[i]=idx[j];idx[j]=tmp_idx;
}
}
template<typename Tnum,typename Tint>
void sort_maxheap_idx(Tnum*b,int k,Tint *idx)
{
register int i;Tnum tmp;Tint tmp_idx;
while(k-->0){
tmp=b[0];b[0]=b[k];b[k]=tmp;
tmp_idx=idx[0];idx[0]=idx[k];idx[k]=tmp_idx;
down_maxheap_idx(b,k,idx);
}
}
template<typename Tnum,typename Tint>
void kmax_idx_maxheap(Tnum * a,long int n,Tnum*b,int k,Tint *idx)
{
if (!(k<=n&&k>0)){return;}
for (int j=0;j<k;j++){b[j]=a[j];idx[j]=j;}
make_maxheap_idx(b,k,idx);
for (register Tint i=k;i<n;i++)
if(a[i]<b[0]){
b[0]=a[i];idx[0]=i;
down_maxheap_idx(b,k,idx);
}
//we may sort the resulting array
sort_maxheap_idx(b,k,idx);
}
#endif
当年写的C代码的更多相关文章
- 不写1行代码,在Mac上体验ASP.NET 5的最简单方法
昨天微软发布了ASP.NET 5 beta2(详见ASP.NET 5 Beta2 发布),对ASP.NET 5的好奇心又被激发了. 今天下午在Mac OS X上体验了一下ASP.NET 5,而且借助Y ...
- 只写104行代码!在nopCommerce中如何实现自动生成网站地图
表告诉我说你不知道nopCommerce是什么.它是目前.NET中最流行的完全开源网上商城,由俄罗斯的团队在2008年开始立项一直开发到现在已经是3.3版本了.代码目前托管在codeplex上,有兴趣 ...
- 写出优美代码的两个方式:一步到位VS迭代优化
最近把手头这个安卓APP的所有事务性方法都写完了,有了以下体会,新手体会,老鸟轻拍 想写成优美代码的人一般都会有这样的想法: 一定要在写每一句代码,写每一个方法,构造每一个类的时候,都要记得优化: ...
- jQuery Validate 表单验证插件----通过name属性来关联字段来验证,改变默认的提示信息,将校验规则写到 js 代码中
一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW 访问密码 f224 二. 添加一个另外一个插件jquery.validate.messages_cn.js. ...
- 程序员的恶性循环:加班->没空学习->老是写同等水平代码->无法提升代码质量->老是出BUG->老是需要修改->加班->...
程序员的恶性循环:加班->没空学习->老是写同等水平代码->无法提升代码质量->老是出BUG->老是需要修改->加班->...
- 将自己写的Python代码打包放到PyPI上
如果是开源的Python代码,为了能够让大家更方便的使用,放到PyPI上也许是个非常不错的主意(PyPI:Python Package Index).刚开始我以为要将代码打包放到PyPI上是一件非常复 ...
- 瞧一瞧,看一看呐,用MVC+EF快速弄出一个CRUD,一行代码都不用写,真的一行代码都不用写!!!!
瞧一瞧,看一看呐用MVC+EF快速弄出一个CRUD,一行代码都不用写,真的一行代码都不用写!!!! 现在要写的呢就是,用MVC和EF弄出一个CRUD四个页面和一个列表页面的一个快速DEMO,当然是在不 ...
- NASA关于如何写出安全代码的10条军规
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:NASA关于如何写出安全代码的10条军规.
- javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数
javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数 function test(){ var bt = document.getElementById(" ...
随机推荐
- 每天一点点之vue框架开发 - vue中使用vue-router切换页面时自动滚动到顶部的方法
1. 在main.js入口文件中写入 //路由跳转后,页面回到顶部 router.afterEach(() => { document.body.scrollTop = 0; document. ...
- exgcd详解
注:本文中所有 \(\%\) 号均表示取模, \(gcd(a,b)\) 表示 \(a\) 和 \(b\) 的最大公因数 1.exgcd是什么? exgcd大名扩展欧几里得算法,用来求形如 \(gcd( ...
- UIWindow的那些事
UIView是视图的基类,UIViewController是视图控制器的基类,UIResponder是表示一个可以在屏幕上响应触摸事件的对象: 一.UIWindow是一种特殊的UIView,通常在一个 ...
- Java基础——HashTable源码分析
HashTable是基于哈希表的Map接口的同步实现 HashTable中元素的key是唯一的,value值可重复 HashTable中元素的key和value不允许为null,如果遇到null,则返 ...
- Apache的网站,使用Nginx进行反向代理(1个IP绑定多个域名,对应多个网站)解决方案
同一个端口是不能同时有两个程序监听的.所以换个思路解决同一台服务器下某些网站运行在nginx下,某些网站运行在Apache下共存. 解决思路: 将nginx作为代理服务器和web服务器使用,nginx ...
- Mybatis实现条件查询(三)
1. 准备 请先完成Mybatis基本配置(一)的基本内容 2. 疑问 我们再Mybatis基本配置(一)中实现了按照商品ID进行查询商品信息,可是在实际应用中却很少出现根据ID来查询商品的情况.因为 ...
- 第21章—websocket
spring boot 系列学习记录:http://www.cnblogs.com/jinxiaohang/p/8111057.html 码云源码地址:https://gitee.com/jinxia ...
- class选择器,外部样式表,选择器优先级
class选择器: 先在相应标签中设置一个class属性,如class=“class名”.class名{ ……css样式}注:class名以英文字母开头,可以多个标签重复使用.优先级:标签名选择器 & ...
- java.lang.SecurityException: Permission denied (missing INTERNET permission?)
ndroid app里试图用HttpUrlConnection获取网络连接,忘记在AndroidManifest清单文件里声明需要用到Internet的权限,运行时报此错误. 解决方法 在Androi ...
- one_day_one_linuxCmd---tar命令
<坚持每天学习一个 linux 命令,今天我们来学习 tar 命令> 摘要:tar 命令是一个 Linux 下的打包程序,通常在 Linux 下,打包和压缩是不同的程序,打包通过 tar ...