基数排序是基于桶排序实现的,总之基本思想是:先基于个位进行桶排序,更新原序列;再基于十位进行桶排序,更新原序列……

code1:java
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++实现的更多相关文章

  1. 基数排序 java 实现

    基数排序 java 实现 Wikipedia: Radix sort geeksforgeeks: Radix sort 数学之美番外篇:快排为什么那样快 Java排序算法总结(八):基数排序 排序八 ...

  2. 基本排序算法——基数排序java实现

    基数排序 package basic.sort; import java.util.Arrays; import java.util.Random; public class RadixSort { ...

  3. 排序基础之非比较的计数排序、桶排序、基数排序(Java实现)

    转载请注明原文地址: http://www.cnblogs.com/ygj0930/p/6639353.html  比较和非比较排序 快速排序.归并排序.堆排序.冒泡排序等比较排序,每个数都必须和其他 ...

  4. 基数排序——Java实现

    一.基数排序思想 相比其它排序,主要是利用比较和交换,而基数排序则是利用分配和收集两种基本操作.基数 排序是一种按记录关键字的各位值逐步进行排序的方法.此种排序一般适用于记录的关键字为整数类型的情况. ...

  5. java各种排序实现

    排序是程序开发中一种非常常见的操作,对一组任意的数据元素(或记录)经过排序操作后,就可以把他们变成一组按关键字排序的有序队列. 对一个排序算法来说,一般从下面3个方面来衡量算法的优劣: 时间复杂度:它 ...

  6. 各种排序算法及其java程序实现

    各种排序算法:冒择路(入)兮(稀)快归堆,桶式排序,基数排序 冒泡排序,选择排序,插入排序,稀尔排序,快速排序,归并排序,堆排序,桶式排序,基数排序 一.冒泡排序(BubbleSort)1. 基本思想 ...

  7. 20172302 《Java软件结构与数据结构》第五周学习总结

    2018年学习总结博客总目录:第一周 第二周 第三周 第四周 第五周 教材学习内容总结 查找 查找即在某项目组中寻找某一指定目标元素,或确定该组中并不存在此元素.对其进行查找的项目组称为查找池. 1. ...

  8. Java数据结构和算法(四)赫夫曼树

    Java数据结构和算法(四)赫夫曼树 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 赫夫曼树又称为最优二叉树,赫夫曼树的一个 ...

  9. 排序算法及其java实现

    各种排序算法:冒择路(入)兮(稀)快归堆,桶式排序,基数排序 冒泡排序,选择排序,插入排序,稀尔排序,快速排序,归并排序,堆排序,桶式排序,基数排序 一.冒泡排序(BubbleSort) 1. 基本思 ...

随机推荐

  1. 字符串转换为整数”123“-&gt;123

    字符串转换为整数"123"->123 题目描写叙述: 输入一个由数字组成的字符串.把它转换成整数并输出. 比如:输入字符串"123".输出整数123. 给 ...

  2. Ubuntu下Chromium源码的编译

    一.失败的经历 印象中,谷歌建议Ubuntu建议版本为10.4.但是我找不到出处了,模糊的印象.不知道是不是这样? 1.Ubuntu10.4.3-desktop-amd64 + Virtual Box ...

  3. Python+Django+SAE系列教程14-----使表单更安全

    还记得我们上一章提到过的加入页面吗? watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGVtZW5nMTk4MA==/font/5a6L5L2T/fonts ...

  4. 【C语言】写一个函数,实现字符串内单词逆序

    //写一个函数,实现字符串内单词逆序 //比如student a am i.逆序后i am a student. #include <stdio.h> #include <strin ...

  5. 关于 typedef & typedef struct & typedef union理解 --写给不长脑子的我

    来源: http://zhidao.baidu.com/link?url=qxzkx5gaoCfnHnygYdzaLEWkC45JqNYYUk42eHHjB0yB3ZMgHv6lGjnq3CRfgQw ...

  6. C++ Primer中文版(第5版)

    <C++ Primer中文版(第5版)> 基本信息 作者: (美)Stanley B. Lippman(斯坦利 李普曼)    Josee Lajoie(约瑟 拉乔伊)    Barbar ...

  7. TF卡分区

    http://bbs.gfan.com/android-5176910-1-1.html http://www.miui.com/thread-2302600-1-1.html http://www. ...

  8. 《JavaScript设计模式与开发实践》读书笔记之代理模式

    1.代理模式 代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问 1.1 一般的图片加载 var myImage=(function () { var imgNode=document.c ...

  9. Reset and clock control (RCC) STM32L

    Reset: 1.系统复位:A system reset sets all registers to their reset values except for the RTC, RTC backup ...

  10. HDU 1661 Assigments 贪心法题解

    Problem Description In a factory, there are N workers to finish two types of tasks (A and B). Each t ...