算法-排序(1)k路平衡归并与败者树

摘要:
组成最大值=999;//根据实际情况选择void kwaymerge{int i,q;r=newElement[k]的最大值;//失败者树中的k个记录int*key=newint[k+1];//k个排序代码和树构建单元key[k]int*losser=newint[k];//k-1个失败者和冠军losser[0],用于{//输入k个合并段中的第一个记录及其排序代码InputRecord;key[i]=r[i].key;}forlosser[i]=k//所有节点为失败者树的k赋值,这意味着第k个合并段密钥[k]=-MaxValue;用于调整;//从键[k-1]调整到键[0]以形成一个失败者树,同时(键[loser[0]!

算法-排序(1)k路平衡归并与败者树第1张

const int MaxValue=999;   //根据实际情况选择最大值
void kwaymerge(Element *r,int k){
    int i,q;
    r=new Element[k];   //在败者树中的k个记录
    int *key=new int[k+1];  //k个排序码和建树单元key[k]
    int *loser=new int[k];  //k-1个败者和冠军loser[0]
    for(i=0; i<k; i++){      //从k个归并段输入第一个记录及其排序码
        InputRecord(r[i]);
        key[i]=r[i].key;
    }
    for(i=0; i<k; i++) loser[i]=k;   //败者树所有结点都赋值k,表示第k归并段
    key[k]=-MaxValue;
    for (i=k-1; i>=0; i--) adjust(key,loser,k,i);   //从key[k-1]起~key[0]起调整形成败者树
    while(key[loser[0]]!=MaxValue){     //当MaxValue上升到loser[0]归并完毕
        q=loser[0];    //取当前最小关键码所在归并段段号送q
        OutputRecord(r[q]);   //r[q]写到输出归并段
        InputRecord(r[q]);    //从第q个归并段再读入下一条记录
        key[q]=r[q].key;
        adjust(key,loser,k,q);  //从key[q]起调整为败者树
    }
    Output end of run marker;   //输出段结束标志
    delete []r;
    delete []k;
    delete []loser;
}

void adjust(int key[]; int loser[]; int k; int q){
    for(int t=(k+q)/2; t>0; t/=2)
        if(key[loser[t]]<key[q]){
            int temp=q;
            q=loser[t];
            loser[t]=temp;
        }
    loser[0]=q;
}

免责声明:文章转载自《算法-排序(1)k路平衡归并与败者树》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇08- adb常用命令以及模拟器链接adb命令嵌入式开发之web---vue-demo webstorm goahead 嵌入式智能设备下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

笔试题算法系列(八)百度有趣的排序

[编程题] 有趣的排序 时间限制:1秒 空间限制:32768K 度度熊有一个N个数的数组,他想将数组从小到大 排好序,但是萌萌的度度熊只会下面这个操作:任取数组中的一个数然后将它放置在数组的最后一个位置。问最少操作多少次可以使得数组从小到大有序? 输入描述: 首先输入一个正整数N,接下来的一行输入N个整数。(N <= 50, 每个数的绝对值小...

sql优化大全

1. 优化SQL步骤 1. 通过 show status和应用特点了解各种 SQL的执行频率 通过 SHOW STATUS 可以提供服务器状态信息,也可以使用 mysqladmin extende d-status 命令获得。 SHOW STATUS 可以根据需要显示 session 级别的统计结果和 global级别的统计结果。 如显示当前sessi...

MySQL查询截取分析

一、查询优化 1,mysql的调优大纲 慢查询的开启并捕获 explain+慢SQL分析 show profile查询SQL在Mysql服务器里面的执行细节和生命周期情况 SQL数据库服务器的参数调优 2,小表驱动大表 mysql的join实现原理是,以驱动表的数据为基础,“嵌套循环”去被驱动表匹配记录。驱动表的索引会失效,而被驱动表的索引有效。 #假...

从零搭建 ES 搜索服务(六)相关性排序优化

一、前言 上篇介绍了搜索结果高亮的实现方法,本篇主要介绍搜索结果相关性排序优化。 二、相关概念 2.1 排序 默认情况下,返回结果是按照「相关性」进行排序的——最相关的文档排在最前。 2.1.1 相关性排序(默认) 在 ES 中相关性评分 由一个浮点数表示,并在搜索结果中通过「 _score 」参数返回,默认是按照 _score 降序排列。 2.1.2...

[MySQL] 常用SQL的优化--18.4

  这里介绍下,Insert、Group By等SQL语句的优化方法: 1、大批量数据插入当load命令导入数据的时候,可以进行适当的设置提高导入速度。 1.1 对于MyISAM表,可以先禁用非唯一索引更新,再导入数据来快速导入大量的数据。   alter table table_name disable keys;   load date infile...

Python实现一些常用排序算法

一些常用的排序 #系统内置排序算法#list.sort()#heapq模块 def sys_heap_sort(list): import heapq heap = [] for i in range(len(list)): heapq.heappush(heap,list[i]) for i in rang...