标签:color pre i++ main out 情况 时间复杂度 复杂度 重复
关于基数排序算法的介绍有很多资料可以通过很多途径获取。基数排序(radix sort)又称桶排序(bucket sort),相对于常见的比较排序,基数排序是一种分配式排序,即通过将所有数字分配到应在的位置最后再覆盖到原数组完成排序的过程。
基数排序算法:
基数排序算法是针对每一位进行排序的,所以我们需要对给定的数据准确求出它的每一位数字是多少:
1 //此函数返回整型数i的第k位是什么 2 public static int getFigure(int i, int k) { 3 int[] a = {1, 10, 100, 1000, 10000, 100000}; 4 return (i / a[k - 1]) % 10; 5 }
1 package com.baozi.com.test.paixu; 2 3 import java.util.Arrays; 4 5 /** 6 * @author BaoZi 7 * @create 2019-05-27-11:24 8 */ 9 public class BitNumberSort { 10 public static void main(String[] args) { 11 //定义整型数组 12 int[] nums = new int[]{21, 56, 88, 195, 354, 1, 35, 12, 6, 7, 4567, 87, 980, 12345}; 13 int[] nums1 = new int[]{1,23,345,21,432,324,4563,56789,6543,233}; 14 BitNumberSort.lsd_RadixSort(nums1, 5); 15 System.out.println(Arrays.toString(nums1)); 16 } 17 18 public static void lsd_RadixSort(int[] nums, int max) { 19 int[] count = new int[10]; 20 int[] bucket = new int[nums.length]; 21 for (int i = 1; i <= max; i++) { 22 23 for (int k = 0; k < count.length; k++) { 24 count[k] = 0; 25 } 26 27 for (int k = 0; k < nums.length; k++) { 28 count[getFigure(nums[k], i)]++; 29 } 30 31 for (int k = 1; k < 10; k++) { 32 count[k] = count[k] + count[k - 1]; 33 } 34 35 for (int k = nums.length - 1; k >= 0; k--) { 36 int index = getFigure(nums[k], i); 37 bucket[count[index] - 1] = nums[k]; 38 count[index]--; 39 } 40 for (int k = 0, j = 0; k < nums.length; k++, j++) { 41 nums[k] = bucket[j]; 42 } 43 } 44 } 45 46 private static int getFigure(int i, int j) { 47 int[] a = new int[]{1, 10, 100, 1000, 10000, 100000}; 48 return (i / a[j - 1]) % 10; 49 } 50 }
标签:color pre i++ main out 情况 时间复杂度 复杂度 重复
原文地址:https://www.cnblogs.com/BaoZiY/p/10929948.html