程序员必须掌握的8种排序算法(八):基数排序

来源:互联网 发布:windows镜像下载网站 编辑:程序博客网 时间:2024/06/05 09:24

sort.jpg

(一)基本思想
将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位(即个位数)开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。

8-1.jpg

(二)代码实现

package com.z;import java.util.ArrayList;import java.util.Arrays;public class Sort {    public static void radixSort(int[] array) {        //获取最大的数        int max = array[0];        for (int i = 1; i < array.length; i++) {            if (array[i] > max) {                max = array[i];            }        }        int digitCount = 0;        //判断位数,位数即排序的趟数        while (max > 0) {            max /= 10;            digitCount++;        }        //建立10个数组;        ArrayList<ArrayList<Integer>> list = new ArrayList<>();        for (int i = 0; i < 10; i++) {            ArrayList<Integer> list1 = new ArrayList<>();            list.add(list1);        }        //进行digitCount次分配和收集;        for (int i = 0; i < digitCount; i++) {            //分配数组元素;            for (int num : array) {                //得到数字的第i+1位数;                int x = num % (int)Math.pow(10, i + 1) / (int)Math.pow(10, i);                ArrayList<Integer> list2 = list.get(x);                list2.add(num);                list.set(x, list2);            }            int index = 0;            //重新排列数组中的元素            for (int k = 0; k < 10; k++) {                while (list.get(k).size() > 0) {                    ArrayList<Integer> list3 = list.get(k);                    array[index] = list3.get(0);                    list3.remove(0);                    index++;                }            }        }    }    public static void main(String[] args) {        int[] arr = {135, 242, 192, 93, 345, 11, 24, 19};        System.out.println("Original array: " + Arrays.toString(arr));          radixSort(arr);        System.out.println("Sorted array: " + Arrays.toString(arr));       }}

运行结果:
Original array: [135, 242, 192, 93, 345, 11, 24, 19]
Sorted array: [11, 19, 24, 93, 135, 192, 242, 345]

阅读全文
0 0
原创粉丝点击