用败者树从N个数中选择最大的k个数字
来源:互联网 发布:花都金蝶软件代理 编辑:程序博客网 时间:2024/05/16 12:01
20 21 24 29 36 45 56 69 84 101 120 141 164 189 16 45 76 109 144 181 20 61 104 149 196 45 96 149 4 61 120 181 44 109 176 45 116 189 64 141 20 101 184 69 156 45 136 29 124 21 120 21 124 29 136 45 156 69 184 101 20 141 64 189 116 45 176 109 44 181 120 61 4 149 96 45 196 149 104 61 20 181 144 109 76 45 16 189 164 141 120 101 84 69 56 45 36 29 24 21
184 184 189 189 189 189 196 196
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
#include <stdio.h>
#include <stdlib.h>
typedef struct wrap_data
{
int path;
int *data;
}wrap_data;
int choosevec(int path)
{
if(path<=4)
{
return 4;
}
else if (path<=8)
{
return 8;
}
else if(path<=16)
{
return 16;
}
else
{
return 32;
}
}
wrap_data **vec;
int vecsize;
void up ( int num )
{
int i,j,k;
wrap_data *first,*second;
i=num;
second=vec[i];
while(i)
{
j=i/2;
first=vec[j];
if(!first)
{
vec[j]=second;
return ;
}
if ( first->path==second->path)
{
i=j;
}
else if ( *( second->data )> *( first->data ))
{
vec[j]=second;
second=first;
i=j;
}
else
{
i=j;
}
}
}
int main()
{
#define PATH 8
#define LENGTH 100
#define MAX_BIG 999999999
wrap_data *result;
int i=0,j=0,k=0;
int global[LENGTH]={0};
wrap_data a[PATH]={0};
int label=0;
vecsize=2* choosevec(PATH);
vec=(wrap_data **)calloc( vecsize ,sizeof (wrap_data*));
for(i=0;i<LENGTH;i++)
{
global[i]=(i*i+20)%200;
printf("%d ",global[i]);
}
for(i=0;i<PATH;i++)
{
a[i].path=i;
a[i].data=(int *)calloc (1 ,sizeof (int ));
*(a[i].data)=global[label++];
}
k=vecsize/2;
for(i=0;i<PATH;i++)
{
vec[k+i]=&a[i];
}
for(i=0;i<PATH;i++)
{
up(i+k);
}
while(label <LENGTH)
{
result=vec[0];
if( global[label]<*( result->data))
{
}
else
{
vec[0]=0;
*(result->data)=global[label ];
up (result->path+k);
}
label++;
}
//dump
printf("\n");
i=0;
while(i++<PATH)
{
result=vec[0];
printf("%d ", *(result->data));
vec[0]=0;
*(result->data)=MAX_BIG;
up (result->path+k);
}
}
- 用败者树从N个数中选择最大的k个数字
- 找出N个整数中最大的K个数
- 找出N个整数中最大的K个数
- 找出N个整数中最大的K个数
- 找出N个整数中最大的K个数
- 找出N个整数中最大的K个数
- 找出N个整数中最大的K个数python
- 选择问题——N个数中选择第K个最大数
- 选择问题——N个数中取第K个最大
- 从n个数中找出前m个最大的
- 选择问题(求N个数中第k个最大者)
- 从K个数中产生n(n<k)个不同的数,可用于抽奖程序!
- 选择问题(一组N个数确定其中的第K个最大者)
- N个数中找出最大的K个数
- 求n个数中最大的k个数
- 寻找N个数中最大的K个数整理
- 计算从N个数字中取K个数字的结果集
- 找出N个数中最大的K个不同的浮点数
- ie6下margin加倍问题。
- 加入ehcache后,系统出现内存泄漏,解决办法
- sql server常用函数
- APB3.0 Slave Master VIP 框图
- asp.net DropDownList 添加空格。
- 用败者树从N个数中选择最大的k个数字
- vim代码折叠
- 管理者的自我修养
- 黑客组织与毒贩集团对峙取胜 被绑成员获释
- t2单向多对1
- smarty基础之拼接字符串
- Android 色深32位支持
- Emacs Dired Mode 批量打开文件的方法
- S3C2440的ADC驱动