排序算法-基数排序_基数排序
来源:互联网 发布:mac office使用技巧 编辑:程序博客网 时间:2024/05/16 14:36
package 基数排序;import java.util.ArrayList;import java.util.List;/** * 基数排序【稳定】 * * 基本思想:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。 * 这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。 */public class 基数排序 { public static void main(String[] args) { int[] a = { 49, 38, 65, 97, 76, 13, 27 }; System.out.println("排序之前:"); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } sort(a);// 基数排序 System.out.println(); System.out.println("排序之后:"); for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } } private static void sort(int[] array) { // 找到最大数,确定要排序几趟 int max = 0; for (int i = 0; i < array.length; i++) { if (max < array[i]) { max = array[i]; } } // 判断位数 int times = 0; while (max > 0) { max = max / 10; times++; } // 建立十个队列 List<ArrayList> queue = new ArrayList<ArrayList>(); for (int i = 0; i < 10; i++) { ArrayList queue1 = new ArrayList(); queue.add(queue1); } // 进行times次分配和收集 for (int i = 0; i < times; i++) { // 分配 for (int j = 0; j < array.length; j++) { int x = array[j] % (int) Math.pow(10, i + 1) / (int) Math.pow(10, i); ArrayList queue2 = queue.get(x); queue2.add(array[j]); queue.set(x, queue2); } // 收集 int count = 0; for (int j = 0; j < 10; j++) { while (queue.get(j).size() > 0) { ArrayList<Integer> queue3 = queue.get(j); array[count] = queue3.get(0); queue3.remove(0); count++; } } } }}
运行结果如下:
排序之前:49 38 65 97 76 13 27 排序之后:13 27 38 49 65 76 97
1 0
- 排序算法-基数排序_基数排序
- 排序算法之基数排序
- 排序算法 - 基数排序(C++)
- 【排序算法】基数排序(RadixSort)
- 排序算法-基数排序
- 排序算法之基数排序
- 排序算法-----基数排序
- 排序算法-基数排序
- 排序算法之基数排序
- 排序算法---基数排序
- 排序算法--基数排序
- 排序算法之基数排序
- 排序算法九:基数排序
- 排序算法之基数排序
- 排序算法: 基数排序
- 排序算法九:基数排序
- 排序算法-基数排序
- 排序算法系列:基数排序
- 0019将字符串逆序操作
- 句柄的理解
- Eclipse常用快捷键
- AreaNum
- Android shape 各种参数 详解
- 排序算法-基数排序_基数排序
- [Django架构流程分析]Django框架架构总览
- 深入Java单例模式
- ScrollView自动滚动实现
- Leetcode153: Permutation Sequence
- Objective-C面向对象编程-知识点汇总
- 四道道经典的笔试题
- kiz挖矿赚钱项目是真的,还是和mmm旁氏骗局一样?
- UVA 10048 Audiophobia(Floyd算法)