算法实验二

2016-10-09#

参考题目

败者树k路归并(可运行)

第一次成功发表博客!!O(∩_∩)O哈!

#include <iostream>  
using namespace std;  
 
#define LEN 10          //最大归并段长  
#define MINKEY -1     //默认全为正数  
#define MAXKEY 100    //最大值,当一个段全部输出后的赋值  
 
struct Array  
{  
   int arr[LEN];  
   int num;  
   int pos;  
}*A;  
 
   int k,count;  
   int *LoserTree,*External;  
 
void Adjust(int s)  
{  
   int t=(s+k)/2;  
   int temp;  
   while(t>0)  
   {  
       if(External[s] > External[LoserTree[t]])  
       {  
           temp = s;  
           s = LoserTree[t];  
           LoserTree[t]=temp;  
       }  
       t=t/2;  
   }  
   LoserTree[0]=s;  
}  
 
void CreateLoserTree()  
{  
   External[k]=MINKEY;  
   int i;  
   for(i=0;i<k;i++)LoserTree[i]=k;  
   for(i=k-1;i>=0;i--)Adjust(i);  
}  
 
void K_Merge()  
{  
   int i,p;  
   for(i=0;i<k;i++)  
   {  
       p = A[i].pos;  
       External[i]=A[i].arr[p];  
       //cout<<External[i]<<",";  
       A[i].pos++;  
   }  
   CreateLoserTree();  
   int NO = 0;  
   while(NO<count)  
   {  
       p=LoserTree[0];  
       cout<<External[p]<<",";  
       NO++;  
       if(A[p].pos>=A[p].num)External[p]=MAXKEY;  
       else   
       {  
           External[p]=A[p].arr[A[p].pos];  
           A[p].pos++;  
       }  
       Adjust(p);  
   }  
   cout<<endl;  
}  
 
int main()  
{  
   freopen("in.txt","r",stdin);  
 
   int i,j;  
   count=0; 
   cin>>k;  
   A=(Array *)malloc(sizeof(Array)*k);  
   for(i=0;i<k;i++)  
   {  
       cin>>A[i].num;  
       count=count+A[i].num;  
       for(j=0;j<A[i].num;j++)  
       {  
           cin>>A[i].arr[j];  
       }  
       A[i].pos=0;  
   }  
   LoserTree=(int *)malloc(sizeof(int)*k);  
   External=(int *)malloc(sizeof(int)*(k+1));  
 
   K_Merge();  
 
   return 0;  
}  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 任务调度问题:在单处理器上具有期限和惩罚的单位时间任务调度问题;平衡树问题:实现3种树中的两种:红黑树,AVL树,...
    mmmwhy阅读 722评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,928评论 25 709
  • 因为之前就复习完数据结构了,所以为了保持记忆,整理了一份复习纲要,复习的时候可以看着纲要想具体内容。 树 树的基本...
    牛富贵儿阅读 7,050评论 3 10
  • 课程介绍 先修课:概率统计,程序设计实习,集合论与图论 后续课:算法分析与设计,编译原理,操作系统,数据库概论,人...
    ShellyWhen阅读 2,382评论 0 3
  • 【一】 前一段时间,有个94年的学妹给我打电话。她说,她很迷茫,很害怕。她说没想到一转身就大三了,很快就要大四了,...
    老皮啊皮阅读 518评论 0 7