博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VC++2012编程演练数据结构《34》树形选择排序
阅读量:5061 次
发布时间:2019-06-12

本文共 1698 字,大约阅读时间需要 5 分钟。

树形选择排序(Tree Selection Sort)
  树形选择排序又称锦标赛排序(Tournament Sort),是一种按照锦标赛的思想进行选择排序的方法。首先对n个记录的关键字进行两两比较,然后在n/2个较小者之间再进行两两比较,如此重复,直至选出最小的记录为止。

  这个过程可用一棵有n个叶子结点的完全二叉树表示。例如,图表2中的二叉树表示从8个数中选出最小数的过程。8个叶子结点到根接点中的关键字,每个非终端结点中的数均等于其左右孩子结点中较小的数值,则根结点中的数即为叶子结点的最小数。在输出最小数之后,割据关系的可传递性,欲选出次小数,仅需将叶子结点中的最小数(13)改为“最大值”,然后从该叶子接点开始,和其左(或右)兄弟的数值进行比较,修改从叶子结点到根的路径上各结点的数,则根结点的数值即为最小值。同理,可依次选出从小到大的所有数。由于含有n个子结点的完全二叉树的深度为log2n+1,则在树形选择排序中,除了最小数值之外,每选择一个次小数仅需要进行log2n次比较,因此,它的时间复杂度为O(nlogn)。但是,这种排序方法尚有辅助存储空间较多、和“最大值”进行多余比较等缺点。为了弥补,威洛姆斯(J. willioms)在1964年提出了另一种形式的选择排序——堆排序。

打开IDE

创建一个工程

声名如下

#include "stdafx.h"//锦标赛排序法#include
#include
#include
//#include
#include
#include
using namespace std;class DataNode //胜者树结点的类定义{public:int data;//数据值int index;//树中的结点号int active;//参选标志};//锦标赛排序中的调整算法;i是表中当前//最小元素的下标,即胜者.从它开始向上调整void UpdataTree(DataNode *tree,int i){int j;if(i%2==0) //i为偶数,对手为左结点tree[(i-1)/2]=tree[i-1];//i为奇数,对手为右结点elsetree[(i-1)/2]=tree[i+1];i=(i-1)/2; //i上升到双亲结点位置while(i){if(i%2==0) j=i-1;//确定i的对手为左结点还是右结点else j=i+1;if(!tree[i].active||!tree[j].active)//比赛对手中间有一个空if(tree[i].active) tree[(i-1)/2]=tree[i];else tree[(i-1)/2]=tree[j]; //非空者上升到双亲结点else //比赛对手都不为空if(tree[i].data
=n的2的最小次幂的数{ m=(int)pow((double) 2,(double)k); if(m>=n) break;}int bottomRowSize=m;int TreeSize=2*bottomRowSize-1;//计算胜者树的大小:内结点+外结点数int loadindex=bottomRowSize-1;//外结点开始位置tree=new DataNode[TreeSize]; //动态分配胜者树结点数组空间for(i=loadindex;i
调用如下
//锦标赛排序法的测试void main(){cout<<"运行结果:\n";int n,b[100],i;srand(time(0));cout<<"输入待排序元素个数n:";cin>>n;for(i=0;i
运行如下
代码下载

转载于:https://www.cnblogs.com/niulanshan/archive/2012/11/20/6175423.html

你可能感兴趣的文章
2019年春季学期第二周作业
查看>>
2014北邮计算机考研复试上机题解(上午+下午)
查看>>
mySQL 教程 第7章 存储过程和函数
查看>>
OGG同步Oracle到Kafka(Kafka Connect Handler)
查看>>
算法笔记_056:蓝桥杯练习 未名湖边的烦恼(Java)
查看>>
idea的maven项目无法引入junit
查看>>
jquery实现限制textarea输入字数
查看>>
thinkphp5 csv格式导入导出(多数据处理)
查看>>
页面置换算法-LRU(Least Recently Used)c++实现
查看>>
如何获取Android系统时间是24小时制还是12小时制
查看>>
fur168.com 改成5917电影
查看>>
PHP上传RAR压缩包并解压目录
查看>>
codeforces global round 1题解搬运
查看>>
python os模块
查看>>
Codeforces 719B Anatoly and Cockroaches
查看>>
jenkins常用插件汇总
查看>>
c# 泛型+反射
查看>>
第九章 前后查找
查看>>
Python学习资料
查看>>
多服务器操作利器 - Polysh
查看>>