6-7基数排序
基数排序
基本介绍
-
基数排序(radixsort) 属于“分配式排序”( distributionsort) ,又称“桶
子法”( bucket sort)或binsort, 顾名思义,它是通过键值的各个位的值,
将要排序的元素分配至某些"桶”中,达到排序的作用 -
基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法
-
基数排序(Radix Sort)是桶排序的扩展
基本思想
- 将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,
从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完
成以后,数列就变成一个有序序列。
图解



代码实现
package com.company.sort;
import java.lang.reflect.Array;
import java.util.Arrays;
/**
* @Function :
* date 2021/5/16 - 17:40
* How :
*/
public class RadixSort {
public static void main(String[] args) {
int [] arr = { 53, 3, 542, 748, 14, 214};
ridixSort(arr);
}
public static void ridixSort(int[] arr){
//获取最大的数
int max = arr[0];
for (int i = 0; i < arr.length; i++) {
if (max<arr[i]){
max = arr[i];
}
}
int maxLenght = String.valueOf(max).length();
for (int k = 0, n=1; k < maxLenght; k++,n*=10) {
//第一轮 只对每一个元素各位进行排序
//第一一个二维数组 包含十个筒 每个桶就是一维数组
int[][] bucket = new int[10][arr.length];
int[] bucketElementCounts = new int[10];
for (int i = 0; i < arr.length; i++) {
int digitOfElement = arr[i]/n%10;
//放入桶中
bucket[digitOfElement][bucketElementCounts[digitOfElement]] = arr[i];
bucketElementCounts[digitOfElement]+=1;
}
//从桶中取出元素
int index = 0;
for (int i = 0; i < bucketElementCounts.length; i++) {
if (bucketElementCounts[i] != 0){
for (int j = 0; j < bucketElementCounts[i]; j++) {
arr[index] = bucket[i][j];
index++;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
}
注意
稳定排序
速度快
数据量大时耗费内存大

浙公网安备 33010602011771号