int[] array = {3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48};

// 只需要修改成对应的方法名就可以了

radixSort(array);

System.out.println(Arrays.toString(array));

}



/**

 * Description: 基数排序

 *

 * @param array

 * @return void

 * @author JourWon

 * @date 2019/7/11 23:45

 */

public static void radixSort(int[] array) {

    if (array == null || array.length <= 1) {

        return;

    }

    int length = array.length;

    // 每位数字范围0~9,基为10

    int radix = 10;

    int[] aux = new int[length];

    int[] count = new int[radix + 1];

    // 以关键字来排序的轮数,由位数最多的数字决定,其余位数少的数字在比较高位时,自动用0进行比较

    // 将数字转换成字符串,字符串的长度就是数字的位数,字符串最长的那个数字也拥有最多的位数

    int x = Arrays.stream(array).map(s -> String.valueOf(s).length()).max().getAsInt();

    // 共需要d轮计数排序, 从d = 0开始,说明是从个位开始比较,符合从右到左的顺序

    for (int d = 0; d < x; d++) {

        // 1. 计算频率,在需要的数组长度上额外加1

        for (int i = 0; i < length; i++) {

            // 使用加1后的索引,有重复的该位置就自增

            count[digitAt(array[i], d) + 1]++;

        }

        // 2. 频率 -> 元素的开始索引

        for (int i = 0; i < radix; i++) {

            count[i + 1] += count[i];

        }

        // 3. 元素按照开始索引分类,用到一个和待排数组一样大临时数组存放数据

        for (int i = 0; i < length; i++) {

            // 填充一个数据后,自增,以便相同的数据可以填到下一个空位

            aux[count[digitAt(array[i], d)]++] = array[i];

        }

        // 4. 数据回写

        for (int i = 0; i < length; i++) {

            array[i] = aux[i];

        }

        // 重置count[],以便下一轮统计使用

        for (int i = 0; i < count.length; i++) {

            count[i] = 0;

        }

    }

}

/**

 * Description: 根据d,获取某个值的个位、十位、百位等,d = 0取出个位,d = 1取出十位,以此类推。对于不存在的高位,用0补

 *

 * @param value

 * @param d

 * @return int

 * @author JourWon

 * @date 2019/7/11 23:46

 */

private static int digitAt(int value, int d) {

    return (value / (int) Math.pow(10, d)) % 10;

} 

## 最后

分享一套我整理的面试干货,这份文档结合了我多年的面试官经验,站在面试官的角度来告诉你,面试官提的那些问题他最想听到你给他的回答是什么,分享出来帮助那些对前途感到迷茫的朋友。

#### 面试经验技巧篇

* 经验技巧1 如何巧妙地回答面试官的问题
* 经验技巧2 如何回答技术性的问题
* 经验技巧3 如何回答非技术性问题
* 经验技巧4 如何回答快速估算类问题
* 经验技巧5 如何回答算法设计问题
* 经验技巧6 如何回答系统设计题
* 经验技巧7 如何解决求职中的时间冲突问题
* 经验技巧8 如果面试问题曾经遇见过,是否要告知面试官
* 经验技巧9 在被企业拒绝后是否可以再申请
* 经验技巧10 如何应对自己不会回答的问题
* 经验技巧11 如何应对面试官的“激将法”语言
* 经验技巧12 如何处理与面试官持不同观点这个问题
* 经验技巧13 什么是职场暗语

![](https://s2.51cto.com/images/20210908/1631038587297604.jpg)

#### 面试真题篇

* 真题详解1 某知名互联网下载服务提供商软件工程师笔试题
* 真题详解2 某知名社交平台软件工程师笔试题
* 真题详解3 某知名安全软件服务提供商软件工程师笔试题
* 真题详解4 某知名互联网金融企业软件工程师笔试题
* 真题详解5 某知名搜索引擎提供商软件工程师笔试题
* 真题详解6 某初创公司软件工程师笔试题
* 真题详解7 某知名游戏软件开发公司软件工程师笔试题
* 真题详解8 某知名电子商务公司软件工程师笔试题
* 真题详解9 某顶级生活消费类网站软件工程师笔试题
* 真题详解10 某知名门户网站软件工程师笔试题
* 真题详解11 某知名互联网金融企业软件工程师笔试题
* 真题详解12 国内某知名网络设备提供商软件工程师笔试题
* 真题详解13 国内某顶级手机制造商软件工程师笔试题
* 真题详解14 某顶级大数据综合服务提供商软件工程师笔试题
* 真题详解15 某著名社交类上市公司软件工程师笔试题
* 真题详解16 某知名互联网公司软件工程师笔试题
* 真题详解17 某知名网络安全公司校园招聘技术类笔试题
* 真题详解18 某知名互联网游戏公司校园招聘运维开发岗笔试题

![](https://s2.51cto.com/images/20210908/1631038587369389.jpg)

> 需要这份文档的朋友可以[点击蓝色传送门](https://gitee.com/vip204888/java-p7)即可免费获取!

资料整理不易,点个关注再走吧