冒泡排序

232 阅读2分钟

冒泡排序(Bubble Sort)是一种简单的排序算法,它的基本思想是通过不断交换相邻的元素将未排序的最大(或最小)元素逐渐“浮”到数组的末尾(或开头)。

思路

具体来说,冒泡排序的算法步骤如下:

  1. 从数组的第一个元素开始,依次比较相邻的两个元素,如果前一个元素比后一个元素大,则交换它们的位置。
  2. 继续向后比较相邻的两个元素,直到比较到倒数第二个元素为止。此时,数组的最后一个元素应该是未排序中的最大(或最小)元素。
  3. 重复步骤1和步骤2,每次将未排序中的最大(或最小)元素“浮”到数组的末尾(或开头),直到所有元素都已排序。

使用了两层循环,外层循环控制排序的趟数,内层循环控制每一趟排序的比较次数。如果相邻的两个元素大小关系不符合要求,就进行交换。最终,通过多趟排序,可以将数组按照从小到大(或从大到小)的顺序排列。

对于某些输入数据,冒泡排序只需要经过一部分排序就可以完成,可以记录最后一次交换的位置,来减少比较的次数。

需要注意的是,冒泡排序的时间复杂度为 O(n^2),因此在处理大规模数据时,它的性能可能会受到影响。

package com.xin.swapsort;

/**
 * @author Hu·YX
 * @Description 冒泡排序
 * @Date 2023/04/18
 */
public class BubbleSort {
    public static void bubbleSort(int[] arr) {
        int n = arr.length;
        int k = n - 1;
        for (int i = 0; i < n - 1; i++) {
            boolean flag = false;
            int last = k;
            for (int j = 0; j < last; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    flag = true;
                    k = j;
                }
            }
            if (! flag) {
                break;
            }
        }
    }
}

代码链接