面试只会冒泡排序?教你一个比冒泡排序还简单的排序算法!-Testfan打卡学测开1011
Posted 自动化软件测试
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试只会冒泡排序?教你一个比冒泡排序还简单的排序算法!-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的主要内容,如果未能解决你的问题,请参考以下文章