C++箱子排序
箱子排序
实现
把每个箱子用一个链表实现。在进行节点分配之前,每个箱子都是空的。
基本思想
1.从与排序链表的头部开始,逐个删除节点,并把它放到合适的箱子链表的头部
2.收集并连接每个箱子中的节点,产生有序的链表
两种实现
第一种实现:
只使用一个箱子数组
//range 是分数的范围
void BinSort(Chain<Node>& X,int range)
{//按分数排序
int len = X.Length();
Node x;
Chain<Node> *bin;//bin是所有的箱子
bin = new Chain<Node> [range + 1];
//分配到每个箱子中
for (int i = 1;i<=len;i++)
{
X.Delete(1,x);
bin[x.score].Insert(0,x);
}
//从箱子中收集各元素(从后向前收集)
for (int j = range;j >= 0;j--)
{
while (!bin[j].Empty())
{
bin[j].Delete(1,x);
X.Insert(0,x);
}
}
delete [] bin;
}
第二种实现
直接写成Chain的成员函数,使用两个箱子数组,一个指向头,一个指向尾。
template <class T>
void Chain<T>::BinSort(int range)
{//按分数排序
int b;//箱子索引号
bottom = new ChainNode<T>* [range +1];
top = new ChainNode<T> * [range +1];
for (b=0;b<=range;b++)//初始化
{
bottom[b] = 0;
}
//把节点分配到各个箱子中
for (; first;first = first.link)//添加到箱子中
{
b = first.data;
if (bottom[b])//箱子非空
{
top[b].link = first;
top[b] = first;
}
else //箱子为空
bottom[b] = top[b] = first;
}
//收集各箱子中的元素
ChainNode<T> *y =0;//暂存箱子的顶部指针
for (b=0;b<=range;b++)
{
if (bottom[b])//箱子非空
{
if(y)//不是第一个非空的箱子
{
y.link = bottom[b];
}
else//第一个非空的箱子
first = bottomo[b];
y = top[b];
}
}
if (y) y.link = 0;
delete [] top;
delete [] bottom;
}
C++箱子排序的更多相关文章
- 【算法】C++用链表实现一个箱子排序附源代码详解
01 箱子排序 1.1 什么是分配排序? 分配排序的基本思想:排序过程无须比较关键字,而是通过"分配"和"收集"过程来实现排序.它们的时间复杂度可达到线性阶:O ...
- 叠罗汉III之推箱子
有一堆箱子,每个箱子宽为wi,长为di,高为hi,现在需要将箱子都堆起来,而且为了使堆起来的箱子不到,上面的箱子的宽度和长度必须小于下面的箱子.请实现一个方法,求出能堆出的最高的高度,这里的高度即堆起 ...
- SGU 230. Weighings (拓扑排序)
题意: 给出质量为1~n的n个箱子的m对轻重关系,输出一种可能的箱子的质量排列. Solution: 拓扑排序,注意要处理重边. #include <iostream> #include ...
- UVA 103 Stacking Boxes 套箱子 DAG最长路 dp记忆化搜索
题意:给出几个多维的箱子,如果箱子的每一边都小于另一个箱子的对应边,那就称这个箱子小于另一个箱子,然后要求能够套出的最多的箱子. 要注意的是关系图的构建,对箱子的边排序,如果分别都小于另一个箱子就说明 ...
- 各种排序算法及其java程序实现
各种排序算法:冒择路(入)兮(稀)快归堆,桶式排序,基数排序 冒泡排序,选择排序,插入排序,稀尔排序,快速排序,归并排序,堆排序,桶式排序,基数排序 一.冒泡排序(BubbleSort)1. 基本思想 ...
- 第四百一十五节,python常用排序算法学习
第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...
- 牛客网NOIP赛前集训营-提高组(第八场)-B-推箱子[最短路优化建图]
题意 有 \(n\) 个箱子,指定一个箱子开始向右推,如果碰到了别的箱子会令其移动,问 \(k\) 秒之后每个箱子所在的位置. \(n\leq 10^5\). 分析 转化成最短路模型,如果两个箱子 \ ...
- python——排序
从学校毕业出来后只知道冒泡排序,发现自己对排序的了解还是很浅显. 于是在网上搜索各种排序方法,以下是本人根据索搜出来的资料再结合自己理解作出的一些简单的阐述. 如果有不正确的地方欢迎大家指正.(共同学 ...
- 排序算法及其java实现
各种排序算法:冒择路(入)兮(稀)快归堆,桶式排序,基数排序 冒泡排序,选择排序,插入排序,稀尔排序,快速排序,归并排序,堆排序,桶式排序,基数排序 一.冒泡排序(BubbleSort) 1. 基本思 ...
随机推荐
- 《Head First 设计模式》读书笔记
目录 <Head First 设计模式>读书笔记 创建模式 结构模式 行为模式 用思维导图记录的读书笔记. <Head First 设计模式>读书笔记 模式的分类遵循<设 ...
- 剑指offer五十六之删除链表中重复的结点
一.题目 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...
- HTML页面的重绘(repaint)和重流(reflow)
重流(Reflow)是指布局引擎为frame计算图形的过程. frame是一个矩形,拥有宽高和相对父容器的偏移.frame用来显示盒模型(content model), 但一个content mode ...
- thymeleaf的常见问题汇总
thymeleaf的常见问题汇总 1.thymeleaf th:href 多个参数传递格式 th:href="@{/Controller/update(param1=1,param2=${p ...
- python上安装requests
首先需要配置好python的环境变量. 测试是否成功配置,进入命令行,输入python. 如下图为配置成功. 去第三方库的网站下载安装包,解压在python的安装目录 ,下载地址:https://py ...
- 解析xml文件步骤 -- pullparser
1. 初始化一个xml的解析器 XmlPullParser parser = Xml.newPullParser(); 2. 设置解析器的参数 InputStream inputStream = th ...
- Java 集合框架(二)—— ArrayList
二.数组列表 —— ArrayList 1.构造方法 ArrayList 是 Java 中的动态数组,底层实现就是对象数组,只不过数组的容量会根据情况来改变. 它有个带 int 类型参数的构造方法,根 ...
- 复刻smartbits的国产网络测试工具minismb-如何测试ip限速
复刻smartbits的网路性能测试工具MiniSMB,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此工具测试任何ip网络设备的端口吞吐率,带宽,并发连接数和最 ...
- (转) Java我的高效编程之环境搭建
前言:刚毕业, 工作之余写博客有利于提高技术,更是能帮助人,接下来会认认真真写好每一篇博客.希望大家多多支持.废话不多说,马上开始.这是一篇环境搭建的博客. jdk+eclipse+svn+maven ...
- SpringMVC 之 Hello World 入门
1 准备开发环境和运行环境 依赖 jar 包下载,如下图所示: 2 前端控制器的配置 在我们的web.xml中添加如下配置: <!-- The front controller of this ...