死磕数据结构与算法(排序)--基数排序。才疏学浅,如有错误,及时指正
八大排序算法
1. 冒泡排序算法
2. 选择排序算法
3. 插入排序冒泡算法
4. 希尔排序冒泡算法
5. 快速插入冒泡算法
6. 归并排序冒泡算法
7. 基数排序冒泡算法
8. 堆排序算法
基数排序
1. 概念以及思路
基数排序,属于“分配式排序”,又叫“桶子法”。是桶排序的扩展。
基数排序是效率高的稳定性排序法
基数排序是经典的空间换时间的方法,占用的内存很大,当对海量的数据进行排序时,容易出现 OutofMemoryError
思路: 将数组中的每一个数按照位数进行切割,然后放入事先准备好的桶中,按照每一次的位数从而得到有序的序列。
2. 图解过程
3. 示例代码
package sort;
import java.util.Arrays;
public class RadixSort {
public static void main(String[] args) {
int arr[] = {
15,17,30,98,5,60,4,5,1,50};
radixSort( arr );
System.out.println( Arrays.toString(arr));
}
public static void radixSort(int[] arr){
//定义一个桶的二维数组
int a[][] = new int[10][arr.length];
//定义一个存储每个桶内有多少元素的数组
int b[] = new int[arr.length];
int max = arr[0];
//计算出arr中最大的那个数
for (int i = 1; i < arr.length; i++) {
if(arr[i] > max){
max = arr[i];
}
}
//使用max计算出位数
int weishu = (max + "").length();
int t = 0;
//循环操作
for (int i = 0; i < weishu; i++) {
//取出arr数组的每一个元素,然后把数组放入到创建的桶中。
for (int j = 0; j < arr.length; j++) {
int wei = arr[j] / (int)Math.pow( 10, i ) % 10;
a[wei][b[wei]] = arr[j];
b[wei]++;
}
//元素全进入桶中之后,再把元素拿出来放入arr中
for (int j = 0; j < arr.length; j++) {
if(b[j] != 0) {
for (int k = 0; k < b[j]; k++) {
arr[t] = a[j][k];
t++;
}
}
}
//把b中的数组清0
for (int k = 0; k < b.length; k++) {
b[k] = 0;
}
t = 0;
}
}
}