【练习3.13】

利用社会安全号码对学生记录构成的数组排序。编写一个程序进行这件工作,使用具有1000个桶的基数排序并且分三趟进行。

Answer:

首先,对社会安全号码不了解的就把它当成一个不超过9位的正整数就好了。

于是题目就是,通过1000个桶,对9位正整数进行桶排序。

因为一次最多比较三位(1000桶),刚好分三趟进行,加上最后复制回数组的一次,共遍历数组长度四次,时间复杂度O(N)

测试代码:

 #include <iostream>
#include "linklist.h"
using namespace std;
using namespace linklist;
template class List<int>;
int main(void)
{
int numbers[] = { , , , , , , , , , };
bucketsort(numbers, );
for (auto elem : numbers)
cout << elem << endl; system("pause");
}

实现代码:

 //练习3.13新增,4位数桶对不超过9位的正整数(社会安全号)桶排序
void bucketsort(int ssn[], int size)
{
//每次对三位数进行排序
List<int>* lastthree = new List<int>[]; //初次排序时,遍历数组
//将每个元素后三位压入与之对应编号的链表
for (int i = ; i != size; ++i)
lastthree[ssn[i] % ].additem(ssn[i]); //以后的排序时,按顺序遍历前一个链表
//将元素的某三位压入与之对应编号的链表
List<int>* midthree = new List<int>[];
for (int i = ; i != ; ++i)
{
for (Node<int>* iter = lastthree[i].begin(); iter != nullptr; iter = iter->next)
midthree[(iter->data / ) % ].additem(iter->data);
}
delete[] lastthree;
List<int>* firstthree = new List<int>[];
for (int i = ; i != ; ++i)
{
for (Node<int>* iter = midthree[i].begin(); iter != nullptr; iter = iter->next)
lastthree[iter->data / ].additem(iter->data);
}
delete[] midthree; //排序完成后,按顺序遍历当前链表,并将元素依次复制入原数组
for (int i = , j = ; i != ; ++i)
{
for (Node<int>* iter = lastthree[i].begin(); iter != nullptr; iter = iter->next)
ssn[j++] = iter->data;
}
delete[] lastthree;
}

【Weiss】【第03章】练习3.13:桶排序的更多相关文章

  1. 【Weiss】【第03章】练习3.16:删除相同元素

    [练习3.16] 假设我们有一个基于数组的表A[0,1...N-1],并且我们想删除所有相同的元素. LastPosition初始值为N-1,但应该随着相同元素被删除而变得越来越小. 考虑图3-61中 ...

  2. suse 12 二进制部署 Kubernetets 1.19.7 - 第03章 - 部署flannel插件

    文章目录 1.3.部署flannel网络 1.3.0.下载flannel二进制文件 1.3.1.创建flannel证书和私钥 1.3.2.生成flannel证书和私钥 1.3.3.将pod网段写入et ...

  3. 第03章 AOP前奏

    第03章 AOP前奏 提出问题 ●情景:数学计算器 ●要求 ①执行加减乘除运算 ②日志:在程序执行期间追踪正在发生的活动 ③验证:希望计算器只能处理正数的运算 ●常规实现 ●问题 ○代码混乱:越来越多 ...

  4. 第03章_基本的SELECT语句

    第03章_基本的SELECT语句 1. SQL概述 1.1 SQL背景知识 1946 年,世界上第一台电脑诞生,如今,借由这台电脑发展起来的互联网已经自成江湖.在这几十年里,无数的技术.产业在这片江湖 ...

  5. 【PHP数据结构】其它排序:简单选择、桶排序

    这是我们算法正式文章系列的最后一篇文章了,关于排序的知识我们学习了很多,包括常见的冒泡和快排,也学习过了不太常见的简单插入和希尔排序.既然今天这是最后一篇文章,也是排序相关的最后一篇,那我们就来轻松一 ...

  6. Hark的数据结构与算法练习之桶排序

    算法说明 桶排序的逻辑其实特别好理解,它是一种纯粹的分而治之的排序方法. 举个例子简单说一下大家就知道精髓了. 假如对11,4,2,13,22,24,20 进行排序. 那么,我们将4和2放在一起,将1 ...

  7. 桶排序与基数排序代码(JAVA)

      桶排序 publicstaticvoid bucketSort(int[] a,int max){         int[] buckets;           if(a==null || m ...

  8. 桶排序/基数排序(Radix Sort)

    说基数排序之前,我们先说桶排序: 基本思想:是将阵列分到有限数量的桶子里.每个桶子再个别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序).桶排序是鸽巢排序的一种归纳结果.当要被排序 ...

  9. 51nod 1589 移数博弈【桶排序+链表】

    1589 移数博弈 基准时间限制:1 秒 空间限制:262144 KB 分值: 80 难度:5级算法题   小A和小B在玩一个游戏. 他们拥有一个数列. 小A在该数列中选择出最大的那个数,然后移出该数 ...

随机推荐

  1. Thymeleaf模板笔记

    1.常用标签: 使用thymeleaf模板,首要在html中引入: <html xmlns:th="http://www.thymeleaf.org"> 引入css.j ...

  2. js 网页运行原理

    当我们打开一个网页的时候,浏览器会首先创建一个窗口,这个窗口就是我所知道的window对象,也就是整个Javascript运行所依附的全局变量. 为了加载网页文档,当前窗口又需要创建一个Documen ...

  3. 我是青年你是良品-魅蓝NOTE 2

    2" title="我是青年你是良品-魅蓝NOTE 2">   明天魅蓝即将迎来自己的新品发布会.选择儿童节的第二天后最喜爱的手机品牌.让其成为真正青年的良品. 在 ...

  4. springboot 不同类型多数据源配置及使用

    springboot多数据源配置: datasource.master.jdbc=jdbc:mysql://localhost:3306/test?useUnicode=true&charac ...

  5. paxos算法学习总结

    核心思想 分布式系统架构下如何让整体尽快达成一致观点,也就是多个不同观点收敛到一个观点的过程. 难点 可能会发生少数节点故障,但绝不是大面积故障,不然系统也没法正常工作. 由于存在单点故障,因此不可能 ...

  6. React Native 学习笔记--进阶(二)--动画

    React Native 进阶(二)–动画 动画 流畅.有意义的动画对于移动应用用户体验来说是非常必要的.我们可以联合使用两个互补的系统:用于全局的布局动画LayoutAnimation,和用于创建更 ...

  7. 餐厅随评系列之四:Umu日本料理(米其林二星)

    文章目录 在过去的几个月,工作和生活都极其忙碌,因此博客短暂停更了一阵子.慢慢积累下了很多素材,从近期开始恢复博客更新,不过很多内容估计得靠回忆了. 索性采取"倒叙"的方法,先从最 ...

  8. SQL中 decode()函数简介

    SQL中 decode()函数简介 今天看别人的SQL时看这里面还有decode()函数,以前从来没接触到,上网查了一下,还挺好用的一个函数,写下来希望对朋友们有帮助哈! decode()函数简介: ...

  9. IDEA 运行junit单元测试方法

    配置Run,增加Junit 最终配置如下:

  10. [dubbo 源码之 ]2. 服务消费方如何启动服务

    启动流程 消费者在启动之后,会通过ReferenceConfig#get()来生成远程调用代理类.在get方法中,会启动一系列调用函数,我们来一个个解析. 配置同样包含2种: XML <?xml ...