太晚了,明天有时间在写算法思路,先贴代码

————————————————————————————————————————————————

刚答辩完,毕业好难,感觉自己好水

————————————————————————————————————————————————

解题思路:

  由低位到高位进行排序,比如数组33,22,11,44,67,76,95,98,89,107,最大的数107,也就是需要

三趟排序:

1.相同位置上的数字按照大小排序

2.相同位置上,相同大小的数字按照发现的先后排序。

第一趟,按照个位进行排序,排序后的结果为:11,22,33,44,95,76,67,107,98,89

第二趟,按照十位进行排序,排序后的结果为:107,11,22,33,44,67,76,89,95,98

第三趟,按照百位进行排序,排序后的结果为,11,22,33,44,67,76,89,95,98,107

时间复杂度为O(M*5N),需要线性的外部空间,实际使用中应该较少,不过这种方法的

变种应该挺有用,比如位排序(http://www.cnblogs.com/fcyworld/p/6147042.html)

 #include <iostream>

 using std::cout;

 void radixsort(int *a,int num);
int loop(int *a,int num);
int main()
{
int a[]={,,1,,,,,9,8,107};
radixsort(a,);
for(int i=;i<;i++)
cout<<a[i]<<" ";
return ;
}
int loop(int *a,int num)
{
int maxnum=,i;
for(i=;i<num;i++)
if(a[i]>maxnum)
maxnum=a[i];
i=;
maxnum/=;
while(maxnum>)
{
i++;
maxnum/=;
}
return i;
}
void radixsort(int *a,int num)
{
int looptime=loop(a,num);
int *counts=new int[];
int *tmp=new int[num];
int i,j,k,rs=;
for(j=;j<looptime;j++)
{
for(i=;i<;i++)
counts[i]=;
for(i=;i<num;i++)
{
k=(a[i]/rs)%;
counts[k]++;
}
for(i=;i<;i++)
counts[i]+=counts[i-];    //确定每个数字出现的次数以及范围,
                          //比如counts[0]=3,counts[1]=5,
                          //那么数字1应该保存的位置就应该在索引8以下,
                          //而数字1出现的次数由原数组中计算,感觉这个方法很巧妙
for(i=;i<num;i++)
{
k=(a[i]/rs)%;        //计算每个数字应该保存的位置
tmp[counts[k]-]=a[i];    //
counts[k]--;
}
for(i=;i<num;i++)
a[i]=tmp[i];
rs*=;
}
delete[]tmp;
delete[]counts;
}

【Sort】RadixSort基数排序的更多相关文章

  1. 【sort】 基数排序

    下面这段问答摘自csdn: 把基数排序说成桶排序应该是没有太大问题的.总的说来,应该把这一类归为分配排序,由于分配排序的一些缺陷,主要是时间代价很差,改进成为桶式排序(bucket sort),而桶排 ...

  2. 非常无聊——STD::sort VS 基数排序

    众所周知,Std::sort()是一个非常快速的排序算法,它基于快排,但又有所修改.一般来说用它就挺快的了,代码一行,时间复杂度O(nlogn)(难道不是大叫一声“老子要排序!!”就排好了么...). ...

  3. 【UVA 11462】 Age Sort(基数排序)

    题 题意 给你最多2000000个数据,大小是1到99的数,让你排序输出. 分析 快排也可以过.不过这题本意是要基数排序(桶排序),就是读入年龄age, a[age]++,然后输出时,从1到99岁(看 ...

  4. java的八大排序

    public class Sort2 { public static void main(String[] args) { Sort2 sort = new Sort2(); System.out.p ...

  5. java八大排序代码

    import java.util.ArrayList;import java.util.List; public class FastSort { public static void main(St ...

  6. 【算法】基数排序(Radix Sort)(十)

    基数排序(Radix Sort) 基数排序是按照低位先排序,然后收集:再按照高位排序,然后再收集:依次类推,直到最高位.有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序.最后的次序就 ...

  7. java-数组排序--计数排序、桶排序、基数排序

    计数排序引入 不难发现不论是冒泡排序还是插入排序,其排序方法都是通过对每一个数进行两两比较进行排序的,这种方法称为比较排序,实际上对每个数的两两比较严重影响了其效率,理论上比较排序时间复杂度的最低下限 ...

  8. 十大经典排序算法+sort排序

    本文转自:十大经典排序算法,其中有动图+代码详解,本文简单介绍+个人理解. 排序算法 经典的算法问题,也是面试过程中经常被问到的问题.排序算法简单分类如下: 这些排序算法的时间复杂度等参数如下: 其中 ...

  9. 排序算法-基数排序(Java)

    package com.rao.sort; import java.util.*; /** * @author Srao * @className RadioSort * @date 2019/12/ ...

随机推荐

  1. JavaEE XML DOM创建之DOM4J

    DOM4J创建xml文档 @author ixenos 1 写出内容到xml文档 XMLWriter writer = new XMLWriter(OutputStream, OutputForamt ...

  2. 64位win7系统中vb工程显示加载MSCOMCTL.OCX失败

    MSCOMCTL.OCX明明已经注册成功,但还是提示加载失败,对象未注册 尝试过的方法:system32中注册,syswow64中注册,vb打sp6补丁, 修改工程文件:用记事本打开VBP文件找到这一 ...

  3. 修改release management client对应的服务器的地址

    参考资料:http://stackoverflow.com/questions/25313053/how-to-change-a-release-management-server-name-in-r ...

  4. 主成分分析(Principal components analysis)-最大方差解释

    原文:http://www.cnblogs.com/jerrylead/archive/2011/04/18/2020209.html 在这一篇之前的内容是<Factor Analysis> ...

  5. [ An Ac a Day ^_^ ][kuangbin带你飞]专题六 最小生成树 POJ 2031 Building a Space Station

    最小生成树模板题 注意最后输出用%f (从C99开始%f已经不能用于输出double 即 输入用%lf 输出用%f) #include<cstdio> #include<algori ...

  6. Python基础之列表

    列表的内置方法 1.append() 描述:用于在列表末尾添加新的对象. 示例: msg_list=["aaaa","bbbbb","cccccc&q ...

  7. JavaScript忍者秘籍——原型

    概要:本篇博客主要介绍JavaScript的原型 1.对象实例化 - 初始化的优先级 初始化操作的优先级如下: ● 通过原型给对象实例添加的属性 ● 在构造器函数内给对象实例添加的属性 在构造器内的绑 ...

  8. 一个在浏览器端将html 转为pdf 的js 插件 jsPDF

    <!DOCTYPE html> <html> <head> <title>test</title> <meta http-equiv= ...

  9. 《Intel汇编第5版》 Mov指令

    一.Mov用于数据传送,用法如下: 二.当传送的数据和目标数据位宽不一致的时候,需要使用MOVZX.MOVSX扩展.MOVZX使用0填充高位,MOVSX使用源操作数最高位填充 下面是汇编代码演示: I ...

  10. 无法定位程序输入点__gxx_personality_v0的一个解决方法

    windows系统,使用mingw32-g++编译一个简单的工程,编译链接过程都没有错误提示,但是运行的时候会弹出提示框提示"无法定位程序输入点__gxx_personality_v0&qu ...