【Sort】RadixSort基数排序
太晚了,明天有时间在写算法思路,先贴代码
————————————————————————————————————————————————
刚答辩完,毕业好难,感觉自己好水
————————————————————————————————————————————————
解题思路:
由低位到高位进行排序,比如数组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基数排序的更多相关文章
- 【sort】 基数排序
下面这段问答摘自csdn: 把基数排序说成桶排序应该是没有太大问题的.总的说来,应该把这一类归为分配排序,由于分配排序的一些缺陷,主要是时间代价很差,改进成为桶式排序(bucket sort),而桶排 ...
- 非常无聊——STD::sort VS 基数排序
众所周知,Std::sort()是一个非常快速的排序算法,它基于快排,但又有所修改.一般来说用它就挺快的了,代码一行,时间复杂度O(nlogn)(难道不是大叫一声“老子要排序!!”就排好了么...). ...
- 【UVA 11462】 Age Sort(基数排序)
题 题意 给你最多2000000个数据,大小是1到99的数,让你排序输出. 分析 快排也可以过.不过这题本意是要基数排序(桶排序),就是读入年龄age, a[age]++,然后输出时,从1到99岁(看 ...
- java的八大排序
public class Sort2 { public static void main(String[] args) { Sort2 sort = new Sort2(); System.out.p ...
- java八大排序代码
import java.util.ArrayList;import java.util.List; public class FastSort { public static void main(St ...
- 【算法】基数排序(Radix Sort)(十)
基数排序(Radix Sort) 基数排序是按照低位先排序,然后收集:再按照高位排序,然后再收集:依次类推,直到最高位.有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序.最后的次序就 ...
- java-数组排序--计数排序、桶排序、基数排序
计数排序引入 不难发现不论是冒泡排序还是插入排序,其排序方法都是通过对每一个数进行两两比较进行排序的,这种方法称为比较排序,实际上对每个数的两两比较严重影响了其效率,理论上比较排序时间复杂度的最低下限 ...
- 十大经典排序算法+sort排序
本文转自:十大经典排序算法,其中有动图+代码详解,本文简单介绍+个人理解. 排序算法 经典的算法问题,也是面试过程中经常被问到的问题.排序算法简单分类如下: 这些排序算法的时间复杂度等参数如下: 其中 ...
- 排序算法-基数排序(Java)
package com.rao.sort; import java.util.*; /** * @author Srao * @className RadioSort * @date 2019/12/ ...
随机推荐
- iOS 手势识别
首先给大家解释一下为什么要学习手势识别? 如果想监听一个UIView上面的触摸事件,之前的做法是: 自定义一个UIView : 实现UIView的touches方法,在方法里面实现具体功能 透过tou ...
- 微信小程序开发(1)
底限,HTML,CSS,JS得会 先过一下官方的文档:https://mp.weixin.qq.com/debug/wxadoc/introduction/index.html?t=20161230 ...
- JAVA上连接ubuntu14.04上的Hbase
对于新手来说,连接虚拟机上的Hbase有点繁琐,而且网上的配置不太适合初学者,今天我就整理了一下,希望对你们有帮助,第一次发博客. 1.首先去官网下载Hbase的压缩包.我这里用的是1.2.1 htt ...
- 【css2、css3】css改变select选择框的样式
效果: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- CodeForces 689D Friends and Subsequences
枚举,二分,$RMQ$. 对于一个序列来说,如果固定区间左端点,随着右端点的增大,最大值肯定是非递减的,最小值肯定是非递增的. 因此,根据这种单调性,我们可以枚举区间左端点$L$,二分找到第一个位置$ ...
- OSI参考模型初识
纪念我曾今热爱的数通(^o^). 1.osi参考模型 2.数据的封装和解封装 3.主机和主机间通信
- F9 开发之左树右表中的左树
1 首先在前端应用树树控件 <div class="fui-left"> <div role="head" title="地区选择& ...
- IE9 浏览器无法捕获中键事件
在silverlight中由于需要添加中键事件,所以通过hook来捕获,但是在IE9上无法运行,该问题是由于IE9设置问题,如下图修改配置, 取消选择即可:
- Delphi关键词
学习的东西越来越多难免会忘记以前的知识,即使是你的大脑很发达也不见得能记得所有的东西,单词,所以做做笔记写写小抄是一个很好的习惯,到需要的时候来翻翻看看,当然个人的作小抄的习惯也不尽相同,这里我自己做 ...
- Git 的版本库创建和修改
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或 ...