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

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

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

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

解题思路:

  由低位到高位进行排序,比如数组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. MFC中CListCtrl说明

    转载:http://blog.csdn.NET/lhy2199/article/details/5177032 listctrl默认view 风格为report CListCtrl类封装"列 ...

  2. Time.timeScale、游戏暂停

    原文链接 项目里面一直在用Time.timeScale来做游戏的 1倍 2倍整体加速,今天我仔细看了一下Time.timeScale才发现之前我理解错了一些东西. Time.timeScale可以控制 ...

  3. C# EnumHelper

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Reflection ...

  4. 循序渐进看Java web日志跟踪(2)-Java日志API认识

    接触过Java的朋友应该都会知道,java的开源框架百花齐放,实现同样的功能,总能找到几个强大的开源框架来进行选择.在日志方面,Java同样不逊色.除了JDK本身自带的简单的日志工具,java还有如l ...

  5. linux统计单词数

    sort +awk+uniq 统计文件中出现次数最多的前10个单词 实例 cat logt.log|sort -s -t '-' -k1n |awk '{print $1;}'|uniq -c|sor ...

  6. java 生成二维码

    package com.sun.erwei; import java.awt.Graphics2D;import java.awt.geom.AffineTransform;import java.a ...

  7. transient关键字小结

    java中实现序列化有两种实现方式,一种是自动的,只要实现Serilizable接口,另一种是需要手动指定需要序列化的成员变量,实现Externalizable接口. transient的特点: 1. ...

  8. oc加载动态图片

    NSString *name = @"qianming.gif"; NSString *filePath = [[NSBundle bundleWithPath:[[NSBundl ...

  9. Introduction to Programming Contests (stanford)

    http://web.stanford.edu/class/cs9http://web.stanford.edu/class/cs97si/7si/

  10. postgreSQL-如何查数据库表、字段以及字段类型、注释等信息?

    之前从网上也搜索了一些关于postgreSQL的系统表含义以及如何查表相关信息,但是都没有一个完整的内容,所以自己将找到的一些内容作了下整合,大家可以根据自己需要再对sql进行调整. --1.查询对象 ...