基数排序---Java实现+C++实现
基数排序是基于桶排序实现的,总之基本思想是:先基于个位进行桶排序,更新原序列;再基于十位进行桶排序,更新原序列……
import java.util.*;
public class JavaTest1
{
public static void main(String[] args)
{
int a[]={1,255,8,6,25,47,14,35,58,75,96,158,657}; bucketsort(a);
showset(a);
} public static void showset(int[] b)
{
for(int i=0;i<b.length;i++)
{
System.out.print(" "+b[i]);
}
System.out.println("");
} public static void bucketsort(int[] data)
{
int n=data.length;
LinkedList<Integer>[] basket=new LinkedList[10]; for(int i=0;i<10;i++)
{
basket[i]=new LinkedList<Integer>();
}
int maxlen=-1;
for(int i=0;i<n;i++)
{
if(Integer.toString(data[i]).length()>maxlen)
{
maxlen=Integer.toString(data[i]).length();
}
}
for(int i=maxlen-1;i>=0;i--)
{
for(int j=0;j<n;j++)
{
String str="";
int len=Integer.toString(data[j]).length();
while(len<maxlen)
{
str+="0";
len++;
}
str+=Integer.toString(data[j]);
basket[str.charAt(i)-'0'].add(data[j]);
}
int pos=0;
for(int k=0;k<10;k++)
{
try
{
while(true)
{
data[pos]=basket[k].removeFirst();
pos++;
}
}
catch(NoSuchElementException e)
{ }
}
showset(data);
}
}
}
代码的基本思想:
先进行个位排序,再进行十位排序,再进行百位排序……
code2:C++
/*==============================
9 name: radix sort
--------------------------------
time complexity:
average
O(2dn)
--------------------------------
space complexity:
O(n)
--------------------------------
stability:
stable
==============================*/ void refresh_data(std::vector<int> &a, std::vector<std::vector<int>> &sto)
{
std::vector<int>::iterator it,it1;
std::vector<std::vector<int>>::iterator it2; it=a.begin();
it2=sto.begin();
while(it!=a.end() && it2!=sto.end())
{
it1=(*it2).begin();
while(it1!=(*it2).end())
{
*it=*it1;
it1++;
it++;
}
(*it2).clear();
it2++;
} return;
} //suppose:there are no minus number
void radix_sort(std::vector<int> &a)
{
std::vector<std::vector<int>> sto;
sto.resize(10);
int max=0; std::vector<int>::iterator it=a.begin();
while(it!=a.end())
{
int idx; if(max<*it)
{
max=*it;
}
idx=(*it)%10;
sto[idx].push_back(*it);
it++;
}
refresh_data(a,sto); int d=0;
int temp=max;
while(1)
{
if(temp!=0)
{
d++;
}
else
{
break;
}
temp/=10;
} for(int i=1;i<=d;i++)
{
int div=pow(10.0,i);
it=a.begin();
while(it!=a.end())
{
int idx;
idx=(*it/div)%10;
sto[idx].push_back(*it);
it++;
}
refresh_data(a,sto);
} return;
}
基数排序---Java实现+C++实现的更多相关文章
- 基数排序 java 实现
基数排序 java 实现 Wikipedia: Radix sort geeksforgeeks: Radix sort 数学之美番外篇:快排为什么那样快 Java排序算法总结(八):基数排序 排序八 ...
- 基本排序算法——基数排序java实现
基数排序 package basic.sort; import java.util.Arrays; import java.util.Random; public class RadixSort { ...
- 排序基础之非比较的计数排序、桶排序、基数排序(Java实现)
转载请注明原文地址: http://www.cnblogs.com/ygj0930/p/6639353.html 比较和非比较排序 快速排序.归并排序.堆排序.冒泡排序等比较排序,每个数都必须和其他 ...
- 基数排序——Java实现
一.基数排序思想 相比其它排序,主要是利用比较和交换,而基数排序则是利用分配和收集两种基本操作.基数 排序是一种按记录关键字的各位值逐步进行排序的方法.此种排序一般适用于记录的关键字为整数类型的情况. ...
- java各种排序实现
排序是程序开发中一种非常常见的操作,对一组任意的数据元素(或记录)经过排序操作后,就可以把他们变成一组按关键字排序的有序队列. 对一个排序算法来说,一般从下面3个方面来衡量算法的优劣: 时间复杂度:它 ...
- 各种排序算法及其java程序实现
各种排序算法:冒择路(入)兮(稀)快归堆,桶式排序,基数排序 冒泡排序,选择排序,插入排序,稀尔排序,快速排序,归并排序,堆排序,桶式排序,基数排序 一.冒泡排序(BubbleSort)1. 基本思想 ...
- 20172302 《Java软件结构与数据结构》第五周学习总结
2018年学习总结博客总目录:第一周 第二周 第三周 第四周 第五周 教材学习内容总结 查找 查找即在某项目组中寻找某一指定目标元素,或确定该组中并不存在此元素.对其进行查找的项目组称为查找池. 1. ...
- Java数据结构和算法(四)赫夫曼树
Java数据结构和算法(四)赫夫曼树 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 赫夫曼树又称为最优二叉树,赫夫曼树的一个 ...
- 排序算法及其java实现
各种排序算法:冒择路(入)兮(稀)快归堆,桶式排序,基数排序 冒泡排序,选择排序,插入排序,稀尔排序,快速排序,归并排序,堆排序,桶式排序,基数排序 一.冒泡排序(BubbleSort) 1. 基本思 ...
随机推荐
- sqlplus连接登录数据库时,出现 ORA-28009错误(转)
安装了oracle10g,打算用SQLPLUS 登录数据库进行操作.打开sqlplus后,可以看到要求输入用户名,口令和主机字符串.前面两个都知道,但是后一个却不明白,查了资料才知道是安装时的全局数据 ...
- skynet源代码学习 - 从全局队列中弹出/压入一个消息队列过程
学习云风的skynet源代码,简单记录下. void skynet_globalmq_push(struct message_queue * queue) { struct global_queue ...
- 【css基础】垂直外边距的合并
近期在重温<CSS权威指南>,还是想把基础再打坚固点,如今对垂直外边距的合并问题进行简单总结. 1. 两个块级元素的外边距都大于0时,取那个最大值作为两个块级元素的垂直边距 请看以下一个小 ...
- symbol(s) not found for architecture i386
此问题针对百度地图真机调试和模拟器.a文件的选取问题 "$(SRCROOT)/MobileYonyou/Third/BaiduMap_IOSSDK_v2.3.0_Lib/Release$(E ...
- jquery.ui.accordion的修改(支持展开多个)
原文:jquery.ui.accordion的修改(支持展开多个) 背景:原jquery.ui.accordion插件,最多只能展开一个,不能展开多个,后来在网上找到了一个基于它的一个修改版(http ...
- C# 开发Chrome内核浏览器(WebKit.net)
原文地址:http://www.cnblogs.com/linyijia/p/4045333.html
- poj2253(最短路小变形)
题目连接:http://poj.org/problem?id=2253 题意:给出一个无向图,求一条1~2的路径使得路径上的最大边权最小. 分析:dij将距离更新改成取最大值即可,即dp[i]表示到达 ...
- hdu2050(递推)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2050 (1) n条直线最多分平面问题 题目大致如:n条直线,最多可以把平面分为多少个区域. 析:可能你 ...
- [poj 1127]Jack Straws[线段相交][并查集]
题意: 给出一系列线段,判断某两个线段是否连通. 思路: 根据线段相交情况建立并查集, 在同一并查集中则连通. (第一反应是强连通分量...实际上只要判断共存即可, 具体的方向啊是没有关系的..) 并 ...
- Software Development and Newton's Laws of Motion
Software Development and Newton's Laws of Motion Intro I have no idea since when the word velocity f ...