【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/ ...
随机推荐
- Cocos2d-x 3.x事件分发机制总结
在2.x中处理事件需要用到委托代理(delegate),相信学过2.x的触摸事件的同学,都知道创建和移除的流程十分繁琐.而在3.x中由于加入了C++11的特性,而对事件的分发机制通过事件分发器Even ...
- grunt--自常用配置文件--js/样式压缩打包,sass工具整合使用
// Project configuration. module.exports = function(grunt) { // 使用严格模式 'use strict'; // 这里定义我们需要的任务 ...
- 隐藏或删除指定的html元素
<div id="Contain"> <div>好好学习<div> <div>天天向上<div> <div> ...
- nodejs中express安装失败解决方法
http://jingyan.baidu.com/article/922554468a3466851648f419.html
- GroupingView点击分组标题不展开,或点击标题部分文字不展开
GroupingView结构: 分组标题groupTextTpl是用两个DIV 来进行修饰的,在mouseDown时,EXT会查找css class=".x-grid-group-hd ...
- C#数组与集合
- 连接pgsql
package com.jpzhutech.select; import java.sql.Connection; import java.sql.DriverManager; import java ...
- PHP strtotime在linux服务器时间延迟8小时问题
今天客户反映有个功能投票模块第一天投了后,第二天就不能投了,理论上是第二天凌晨就可以再答题的,发现本地是正常的,linux服务器异常, 仔细查找原因发现是strtotime函数获取的值和本地获取的值不 ...
- lunix存取windows共享文件夹
在访问Windows共享资料之前,请确保Windows共享是可用的,这里就不再赘述该怎样设置Windows共享了,那可是另外一个课题. Linux访问Windows共享或者Linux共享资料给Wind ...
- Filewatcher
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...