算法导论8.3-4习题解答(基数排序)

CLRS 8.3-4 : 
说明如何在O(n)时间内,对0到n^2 - 1之间的n个整数进行排序。

算法思想:
1.把这n个数看成n进制数,那么每个数只有两位,因而循环只需两次
2.调用通用的基数排序(在这写着,留着以后用)

在此题中,我选择n = 15, 即数组中有15个数,依次为0, 3, 8, ..., 224,但是将顺序打乱了。

PS:在前一篇文章中,计数排序的总时间为O(k+n),在实践中,如果当k = O(n)时,我们常常采用计数排序,这时其运行时间为O(n).
在这里采用的是基数排序,在实践中,其排序时间为O(d*(n+k)),但很耗内存,有时甚至比快速排序更快,具体应用再看。

#include <iostream>
#include
<math.h>
using namespace std;
void radix_sort(int a[], const int d, const int length, int radix);
int getBit(int m, int i, int radix);
int pow2(int a, int b);
int main()
{
  //数组长度
  const int LEN =15;
  int a[LEN] = {35, 48, 0, 8, 15, 80, 99, 3, 24, 168, 195, 224, 63, 120, 143};
  //多少位
  const int d =2;
  //基数
  const int radix =15;
  //在这调用的是通用的基数排序算法,可以任意改变基数radix,
  //但记得改变d,因为radix改变的话,数字的位数会改变,
  //最简单的是十进制改成二进制,位数激增
  radix_sort(a, d, LEN, radix);
  for(int i =0; i < LEN; i++)
    cout
<<a[i]<<endl;
}
void radix_sort(int a[], const int d, const int length, int radix)
{
  //存储a中每个元素的余数
  int* remainder =new int[length];
  //统计余数(等同于计数排序中的c)
  int* c =new int[radix];
  //保存排序之后的a
  int* b =new int[length];
  for(int i =0; i < radix; i++)
    c[i]
=0;
  for(int i =0; i < d; i++)
  {
    for(int j =0; j < length; j++)
    {
      int temp = getBit(a[j], i, radix);
      remainder[j]
= temp;
      c[temp]
++;
    }
    for(int k =1; k < radix; k++)
      c[k]
= c[k] + c[k -1];
    for(int k = length -1; k >=0; k--)
    {
      b[
--c[remainder[k]]] = a[k];
      //c[remainder[k]]--;
    }
    for(int k =0; k < radix; k++)
      c[k]
=0;
    for(int i =0; i < length; i++)
      a[i]
= b[i];
  }
  delete remainder;
  delete c;
  delete b;
}
//得到相应位上的数值
int getBit(int m, int i, int radix)
{
  return (m%(pow2(radix, i +1)))/pow2(radix, i);
}
//只处理指数b>=0
int pow2(int a, int b)
{
  if(b >0)
  {
    int result = a;
    for(int i =0; i < b -1; i++)
      result
= result*a;
    return result;
  }
  else if(b ==0)
    return 1;
  else
  {
    cout
<<"不处理指数小于零的情况"<<endl;
    return -1;
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267871.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql open-files-limit_在mysql 5.5中更改open-files-limit

我在使用open-files-limit参数在Ubuntu 12.04上运行mysql 5.5时遇到问题.我最近注意到由于1024限制导致的一些问题,实际上主系统限制设置为1024,所以我使用以下内容修改了/etc/security/limits.conf&#xff1a;* soft nofile 32000* hard nofile 32000root soft nofile 32000r…

Lucas定理

定义 对于任意质数p $\Huge C_m^n\equiv C_{\biggl\lfloor\frac{m}{p}\biggr\rfloor}^{\biggl\lfloor\frac{n}{p}\biggr\rfloor}*C_{m\ mod\ p}^{n\ mod\ p}\ \ (MOD\ p)$ 证明 对于任意质数p都有 $\huge C_p^i\equiv0\ MOD\ p(i\not 0\&\&i\notp)$ 通过二项式定理&…

Reverse-engineer Source Code into UML Diagrams

今天同事需要反向生成类图&#xff0c;用PowerDesigner 转了一份&#xff0c;不甚满意&#xff0c;在网上逛了逛&#xff0c;发现在这篇文章挺不错。 I have been on several teams where we studiously designed UML diagrams at the beginning of the project. As the projec…

mysql数据库优先_MySQL数据库配置文件之优先级

1.数据库配置方式1)预编译cmake . -DCMAKE_INSTALL_PREFIX/application/mysql-5.7.20 -DMYSQL_DATADIR/application/mysql-5.7.20/data -DMYSQL_UNIX_ADDR/application/mysql-5.7.20/tmp/mysql.sock -DDEFAULT_CHARSETutf8 -DDEFAULT_COLLATIONutf8_general_ci -DWITH_EXTRA_CH…

What's the best way to get rid of get parameters from url string?

https://stackoverflow.com/questions/27267111/whats-the-best-way-to-get-rid-of-get-parameters-from-url-string转载于:https://www.cnblogs.com/jianglijs/p/8081564.html

wince版本ffmpeg的编译 第四篇

4. 编译faac#cd faac-1.28#dos2unix bootstrap //这里是要转换编码格式的&#xff0c;不然configure过不去#dos2unix configure.in#dos2unix Makefile.in#chmod x bootstrap#./bootstrap#./configure –prefix/wm –enable-static –hostarm-mingw32ce –without-mp4v2#make …

R语言数据去重

R语言常用的去重命令有unique duplicated unique主要是返回一个把重复元素或行给删除的向量、数据框或数组 > x <- c(3:5, 11:8, 8 0:5)> x [1] 3 4 5 11 10 9 8 8 9 10 11 12 13> unique(x)[1] 3 4 5 11 10 9 8 12 13> unique(x, fromLast TRUE)…

postman测试带权限接口_接口测试工具:postman

一、postman简介一般简单的接口测试我们可以直接在浏览器里面进行调试&#xff0c;但是涉及到一些要权限设置的就无法操作了&#xff0c;因此我们需接口测试的相关工具&#xff1b;Postman 是一个接口测试和 http 请求的工具。官网下载地址&#xff1a;https://www.getpostman…

记录在Spring-Boot中使用Fegin调用RESTfull的PATCH方法设置

使用了ZooKeeper&#xff0c;设置 spring.cloud.zookeeper.dependency.headers.enabledfalse 参考&#xff1a; https://github.com/spring-cloud/spring-cloud-netflix/issues/2550#issuecomment-353230054 http://blog.csdn.net/menggudaoke/article/details/77884674转载于:…

mysql getcolumnname_jdbc-mysql基础 ResultSetMetaData getColumnName getColumnLabel 得到列的名字和别名...

礼悟&#xff1a;好好学习多思考&#xff0c;尊师重道存感恩。叶见寻根三二一&#xff0c;江河湖海同一体。虚怀若谷良心主&#xff0c;愿行无悔给最苦。读书锻炼强身心&#xff0c;诚劝且行且珍惜。数据、数据&#xff0c;命根就在数据。云计算、AI等技术&#xff0c;都是以数…

AutoLISP 绘制表情图案

AutoLISP 绘制表情图案&#xff0c;喜怒哀乐表情&#xff0c;代码如下。 (defun c:test() (setvar "cmdecho" 0) (princ "\n选取圆或[ENTER]自定圆心半径&#xff1a;") (setq en (entsel)) (if (null en) (progn (setq srr (getvar &qu…

QT的组合键

https://www.cnblogs.com/Jace-Lee/p/5859293.html 转载于:https://www.cnblogs.com/132818Creator/p/8087536.html

python与7无关的数输出格式第一行为所有与7无关的数_70 道 NumPy 测试题

(给Python开发者加星标&#xff0c;提升Python技能)来源&#xff1a;机器之心本 NumPy 测试题旨在为大家提供参考&#xff0c;让大家可以使用 NumPy 的更多功能。问题共分为四个等级&#xff0c;L1 最简单&#xff0c;难度依次增加。机器之心对该测试题进行了编译介绍&#xff…

如何在 Windows Server 中配置权威时间服务器

如何在 Windows Server 中配置权威时间服务器 查看本文应用于的产品本页 简介o 配置 Windows 时间服务以使用内部硬件时钟 帮我修复此问题 我自己修复此问题o 配置 Windows 时间服务以使用外部时间源 帮我修复此问题 我自己修复此问题o 疑难解答 更…

spring指导的index.html在spring文件夹中的位置

转载于:https://www.cnblogs.com/whoknows1/p/8094359.html

根据端口查找是那个程序正在占用

1、先通过C:\Users\awflasher>netstat -ao 查看那端口对应的pid Local Address Foreign Address State PID TCP TCP 0.0.0.0:21 Pacers:0 LISTENING 511 TCP 0.0.0.0:80 Pacers:0 LISTENING…

springboot链接MySQL线程池_SpringBoot中的数据库连接池

内置的连接池目前Spring Boot中默认支持的连接池有dbcp,dbcp2, tomcat, hikari三种连接池。数据库连接可以使用DataSource池进行自动配置。由于Tomcat数据源连接池的性能和并发&#xff0c;在tomcat可用时&#xff0c;我们总是优先使用它。如果HikariCP可用&#xff0c;我们将使…

小白配置QConf遇到的问题

QConf地址&#xff1a;https://github.com/Qihoo360/QConf 环境&#xff1a;Debian 9.3.0 安装方式&#xff1a;QConf 简易部署和使用 由于用命令行安装以至于到cmake编译出错&#xff0c;所以选择了用rpm包安装。在Debian环境下&#xff0c;需要把rpm转换为deb。需要借助alien…

mysql rename所标时间_mysql rename命令

mysql 命令重命名表RENAME TABLE 句法RENAME TABLE tbl_name TO new_tbl_name[, tbl_name2 TOnew_tbl_name2,...]更名是以原子方式(atomically)执行&#xff0c;这就意味着&#xff0c;当更名正在运行时&#xff0c;其它的任何线程均不能该表。这使得以一个空表替换一个表成为可…

最近研究Rest,这个东西还是个雏形,给个好用的参考地址吧

http://www.ibm.com/developerworks/cn/education/java/j-rest/section5.html 另附&#xff0c;学习Restlet的网址&#xff1a; http://ajaxcn.iteye.com/category/64734 这个连接地址中的内容&#xff0c;很全&#xff0c;我们会继续研究&#xff0c;会有小例子&#xff0c;敬…