Java中的十大排序(六)冒泡排序

587 阅读2分钟

「这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战」。

前言

上一篇章我们讲解了堆排序,堆排序的思路很简单,但是实现起来对于初级程序员来说还是有点抽象,堆仍需要大量练习来掌握,堆的速度很快很推荐初级程序员进行深入了解,本章呢给大家做一道小菜,也就是三大基础排序之一:冒泡排序。

image.png

冒泡排序分析

冒泡排序复杂度分析: 时间复杂度平均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));
}