「这是我参与2022初次更文应战的第12天,活动详情检查:2022初次更文应战」。
前言
上一华章咱们讲解了堆排序,堆排序的思路很简单,可是完成起来关于初级程序员来说仍是有点抽象,堆仍需求许多练习来掌握,堆的速度很快很推荐初级程序员进行深入了解,本章呢给大家做一道小菜,也便是三大根底排序之一:冒泡排序。
冒泡排序分析
冒泡排序复杂度分析: 时刻复杂度平均O(n^2) 时刻复杂度最坏O(n^2) 时刻复杂度最好O(n) 空间复杂度O(1) 稳定性为稳定
分析:由上面的参数咱们能够看出冒泡排序的时刻速度是比较慢的,速度远不如前面讲的堆与希尔排序,可是他与选择排序有个优点便是易于掌握,代码完成特别简单,他的空间复杂度也是正常占用,不运用多余空间。
冒泡排序的思路
冒泡顾名思义冒泡泡吗,你想想鱼的泡泡是不是越来越大越来越大直接到水面,咱们这个完成也是一样得,便是一个数使得它与数组中其他数值进行比较,大的往后跑,就以此类推,直到整个数组都是有序的。
冒泡有个缺点便是如果数组过于无序的话,他的交流次数与他的循环次数会十分大,使得排序进程十分缓慢,所以排序仍是那句话,关于你的需求选择最合适的排序才是最优排序。
// private static int[] arr = {6, 5, 3, 2, 4};
咱们运用上述来作为例子
6 5 3 2 4 //初始数组
5 3 2 4 6 // 6 与数组中每一个进行比较,发现他是最大的那么就把他放在数组尾
3 2 4 5 6 // 5 与数组6中所有的进行比较,然后换位
2 3 4 5 6 // 3 与数组进行比较,然后换位
2 3 4 5 6 // 2 与数组比较发现数组已经有序,完成排序
冒泡排序代码完成
经过上面的思路咱们能够发现,冒泡排序的交流次数是许多的。他便是经过不断地交流来完成冒泡的进程。
代码完成:
@Test
public void bubbleSort() {
//数组中的每一项数字
for (int i = 0; i < arr.length; i++) {
// 数组中当前需求进行冒泡的数字
for (int j = 0; j < arr.length; j++) {
//在这里不断地进行冒泡交流
if (arr[i] < arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
System.out.println(getArr(arr));
}