面试只会冒泡排序?教你一个比冒泡排序还简单的排序算法!-Testfan打卡学测开1011

Posted 自动化软件测试

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试只会冒泡排序?教你一个比冒泡排序还简单的排序算法!-Testfan打卡学测开1011相关的知识,希望对你有一定的参考价值。


本期技术分享讲师   北河老师

题目内容

对一个指定的数组进行排序,将排序后的数字打印出来

本期语音讲解


面试只会冒泡排序?教你一个比冒泡排序还简单的排序算法!-Testfan打卡学测开1011
本期文字解析
分析:
一般面试时问到排序的问题,大部分人都会写冒泡排序。今天讲一种比冒泡排序更简单,三分钟就可以学会的排序方法: 桶排序

思路:
数组的索引是天然的已经排序好的结构,可以利用数组的索引来进行排序
先看一下数组的结构

面试只会冒泡排序?教你一个比冒泡排序还简单的排序算法!-Testfan打卡学测开1011


给一个指定的数组A,如:1、5、20、8、12、16、3
可以看到,数组中最大的数字为20


1、创建一个长度为21的空数组B,初始值全为0,那么其索引的范围是0-20
2、遍历数组A,获取数组A中的每一个元素。然后将元素当成B数组索引,将B数组对应位置的值设置为1,如果对应位置已经是1了,将其值+1重新赋值
3、遍历数组B,如果遇到不为0的元素,将其索引打印出来,如果元素大于1,要打印多次。即如果元素为n,就打印n次该元素的索引

特点
1、    数组中最大值为n,就需要创建一个长度至少为n+1的空数组,所以桶排序不适合最大值比较大的数组
2、    当数组中最大值不是很大的时候,可以考虑使用桶排序,以空间换时间
3、    如果数字中包含负数,需要另外开辟一个空数组进行排序
4、    桶排序最佳情况下时间复杂度为O(N)    

代码:


public static void bucketSort(int[] array) {
    // 定义一个空数组,数组的长度要大于数组中最大的那个值,int数组默认值都是0
    int bucket[] = new int[21];
    // 遍历需要排序的数组
    for (int i = 0; i < array.length; i++) {
        int value = array[i];
        // 指定索引位置做标记
        bucket[value] += 1;
    }
    // 打印
    for (int i = 0; i < bucket.length; i++) {
        for (int n = 0; n < bucket[i]; n++) {
            System.out.println(i);
        }
    }
}

推荐阅读:















以上是关于面试只会冒泡排序?教你一个比冒泡排序还简单的排序算法!-Testfan打卡学测开1011的主要内容,如果未能解决你的问题,请参考以下文章

面试官:写一个冒泡排序和快速排序吧

面试,我却输在了简单的冒泡排序....

冒泡排序(面试版)

算法面试章-排序:彻底拿下插入排序和冒泡排序

冒泡排序的理解

可视化冒泡排序算法