`

排序系列(七)--基数排序

J# 
阅读更多

 

import java.util.ArrayList;

 

//author:lilywangcn

public class RadixSort {

//private static int[] array={36,5,16,98,95,47,32,36,48};

private static int[] array={614,738,921,485,637,101,215,530,790,306};

/**

* @param args

*/

 

public static void main(String[] args) {

// TODO Auto-generated method stub

ArrayList[] arrayradix=new ArrayList[10];

for(int k=0;k<10;k++){

arrayradix[k]=new ArrayList();

}

int key=0;

for(int i=0;i<3;i++){

for(int j=0; j<array.length; j++){

int numkey=getKey(array[j],10,i);

switch(numkey){

case 0:arrayradix[0].add(array[j]);break;

case 1:arrayradix[1].add(array[j]); break;

case 2:arrayradix[2].add(array[j]);break;

case 3:arrayradix[3].add(array[j]); break;

case 4:arrayradix[4].add(array[j]); break;

case 5:arrayradix[5].add(array[j]); break;

case 6:arrayradix[6].add(array[j]); break;

case 7:arrayradix[7].add(array[j]); break;

case 8:arrayradix[8].add(array[j]); break;

case 9:arrayradix[9].add(array[j]); break;

}

}

int m=0;

for(int k=0;k<10;k++){

for(int j=0;j<arrayradix[k].size();j++){

array[m++]=(Integer)arrayradix[k].get(j);

}

arrayradix[k].clear();

}

print();

}

}

private static int getKey(int num, int radix, int position){

if (position ==0) return num%radix;

else return (num/getnum(position,radix))%radix;

}

private static int getnum(int position, int radix){

int result=radix;

for(int i=1;i<position;i++)

result*=radix;

return result;

}

private static void print(){

for(int i=0;i<array.length;i++){

System.out.print(array[i]+" ");

}

System.out.println("");

}

 

}


算法的时间复杂度:O(d*n),d为数字的最大位数。算法稳定

运行结果:
530 790 921 101 614 485 215 306 637 738 
101 306 614 215 921 530 637 738 485 790 
101 215 306 485 530 614 637 738 790 921 
分享到:
评论

相关推荐

    插入排序冒泡排序堆排序基数排序选择排序快速排序源码

    例如,插入排序和选择排序适合小规模数据,冒泡排序虽然效率较低但实现简单,堆排序和快速排序在处理大规模数据时有较好性能,而基数排序则能处理非负整数排序。在实际开发中,根据具体需求选择合适的排序算法是非常...

    基数排序-数据结构

    基数排序是一种非比较型整数排序算法,它的原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。在这个程序中,基数排序被实现为一个名为`RadixSort`的函数,用于对`SLList`类型的链表进行排序。`SLList`...

    数据结构的链式基数排序

    根据给定文件的信息,我们可以提炼出关于“链式基数排序”的相关知识点,主要涉及排序算法的概念、链式基数排序的基本原理及其实现。 ### 数据结构与算法基础 在深入探讨链式基数排序之前,我们首先需要了解一些...

    2009 英特尔® 线程挑战赛 第一题 基数排序 源码

    **基数排序(Radix Sort)**是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。它是最稳定的排序算法之一,时间复杂度为O(kn),其中k是数字的最大位数,n是待排序的元素...

    排序总结(选择、插入、冒泡、希尔、快速、箱子、基数、归并、堆)

    ### 七、基数排序 基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序并不局限于...

    基数排序PPT学习教案.pptx

    链式基数排序算法的具体实现中,会初始化一系列链表作为队列,每个链表代表一个可能的位值。在分配阶段,遍历每个待排序元素,将其按当前位值插入相应的链表。收集阶段则将链表按照位值顺序连接起来,形成新的有序...

    js.rar_单链表_基数排序

    基数排序是一种非比较型整数排序算法,它的原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于我们这里提到的是基于单链表的基数排序,所以排序的对象不再是数组,而是链表中的节点。 基数排序的...

    符号数据排序.pptx

    - **大数据处理**:基数排序适合处理大规模数据集,如财务数据、日志文件等。 - **数字排序**:非常适合对整数进行排序,如身份证号码、电话号码等。 - **非负整数排序**:仅适用于非负整数排序,如果包含负数或...

    c++语言实现排序

    - **基数排序** (`RadixSort`):基于数字的位数进行排序,通常作为其他排序算法的基础。 ##### 3. 排序算法的原理与实现 - **选择排序**: - 外层循环控制遍历整个数组。 - 内层循环找到当前位置之后的最小值的...

    基于Qt5-实现九大排序算法的代码汇总

    6. **基数排序**:基数排序不是基于比较的排序,而是通过按位进行排序,适用于处理非负整数。它将数字视为多位数,从最低位到最高位依次排序。基数排序的时间复杂度为O(kn),其中k是数字的最大位数。 7. **选择排序...

    对时间进行基数排序,输入的是整数格式、输出的是字符串形式

    本篇介绍了如何使用基数排序对时间数据进行排序,并通过一系列辅助方法实现了时间数据的转换和排序。通过这种方式,可以有效地处理大规模时间数据的排序问题,特别是在需要快速排序而不考虑时间复杂度的情况下尤为...

    07-排序1. 排序(25).zip

    7. 计数排序、桶排序和基数排序:这些是非比较型排序算法,适用于特定类型的数据,如整数排序,它们不需要比较操作。 排序算法的选择通常取决于数据特性和性能需求,如稳定性(排序后相等元素的相对顺序是否改变)...

    基数排序算法.zip

    算法是解决特定问题或执行特定任务的一系列步骤或规则的有序集合。在计算机科学中,算法通常用来指导计算机执行特定的任务或解决问题。良好设计的算法能够有效地解决问题,并且在给定的输入下能够产生正确的输出。 ...

    java实现数据结构常见排序算法及详解

    稳定排序算法的一个典型应用是在基数排序中,先按低位排序,再按高位排序,低位排序后元素的顺序在高位也相同时不会改变,这是基数排序能够正确工作的重要原因。 #### 总结 以上介绍了八种常见的排序算法,每种算法...

    Java排序Java排序.doc

    本文主要介绍几种经典的排序算法,包括插入排序、交换排序、选择排序、归并排序和基数排序,并分析了如何根据数据规模和特性选择合适的排序方法。 1. 插入排序: - 直接插入排序:将每个元素插入到已排序部分的...

    排序算法汇总.pdf

    - **分配排序**:包括基数排序、桶排序等,适用于特定类型的数据分布情况,通过将数据分配到若干“桶”中分别处理,最后再合并结果。 #### 三、排序算法分析 **1. 基本操作** - **关键字比较**:几乎所有排序算法...

    排序-动图.zip

    这里我们关注的是“排序-动图.zip”文件,它很可能包含了一系列动态图像,直观地展示了不同的排序算法工作原理。虽然没有具体的标签信息,我们可以根据文件名推测其内容可能涵盖了各种排序算法的动画演示。 首先,...

    线性排序:如何根据年龄给100万用户数据排序?.pdf

    本文将探讨线性排序算法,包括桶排序、计数排序和基数排序,并通过一个具体的案例——根据年龄对100万用户数据进行排序,来深入理解这些算法的工作原理及其适用场景。 #### 二、线性排序算法介绍 线性排序算法是一...

    数据结构模拟演示过程swf——排序系列(整理出来的,很直观,非常不错!)

    这里,我们有七个不同的排序算法通过SWF文件进行直观的演示,包括堆排序、归并排序、基数排序、快速排序、冒泡排序、桶式排序法和希尔排序,以及直接插入排序和直接选择排序。这些动画演示提供了对每种排序算法工作...

Global site tag (gtag.js) - Google Analytics