上文我们聊到桶排序,了解到虽然桶排序简单,快速,但是同时也有其致命的缺点:那就是空桶对内存空间的极大浪费以及只能针对正整数排序;所以我们需要一个较好的算法来解决这两个问题,接下来我们就来认识一个新的算法:冒泡排序。
先上代码实现:
public class BubbleSort {
public static void main(String[] args) {
// 1.等待排序的数组
int[] waitNumbers = {3,15,8,13,6,35};
// 2.定义一个临时变量
int temp;
// 3.冒泡趟数
for (int i = 0; i < waitNumbers.length - 1; i++) {
for (int j = 0; j < waitNumbers.length - i - 1; j++) {
if (waitNumbers[j + 1] < waitNumbers[j]) {
temp = waitNumbers[j];
waitNumbers[j] = waitNumbers[j + 1];
waitNumbers[j + 1] = temp;
}
}
}
System.out.println(Arrays.toString(waitNumbers));
}
}
结果:[3, 6, 8, 13, 15, 35]
如果你想从大到小的顺序排序就将判断条件换下即可;
分析(已从小到大为例):从第一个数开始,拿第一个数依次与相邻的两个数比较,如果后面一位小于前面一位就将这两个数字的位置互换,经过第一次冒泡之后,我们就能将最大的那位数字排到了最后一位;
第二轮,继续从第一个数开始,相邻比较直到倒数第二位结束,就将第二大的数排到了倒数第二位;
依次类推下去:我们将能将数字从小到大排序;
案例中i就代表需要遍历的轮数,j代表每一轮的遍历,整个过程类似冒泡将最大的数依次冒出水面,因此得名:冒泡算法
冒泡算法的核心:双重嵌套循环,我们不难发现该算法的时间复杂度为:O(N²)这个时间复杂度是比较高的