死磕数据结构与算法(排序)--基数排序。才疏学浅,如有错误,及时指正

八大排序算法

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;
        }
    }
}


猜你喜欢

转载自blog.csdn.net/qq_41497756/article/details/108843355
今日推荐