冒泡排序逻辑

重复地遍历待排序的元素,每次比较相邻的两个元素,并交换它们的位置,直到整个序列按照从小到大的顺序排列

因为不会交换相等值,所以冒泡排序是稳定排序

复杂度分析

平均时间复杂度:O(n^2)

空间复杂度:O(1)

最差情况的时间复杂度,待排序数组是倒序排列的,需要进行n-1次比较和交换操作,因此最坏情况下的时间复杂度为O(n^2)

代码实现

class Main {
    public static void bubbleSort(int[] arr) {
        int len = arr.length;
        // i用于记录已经放好的最大值数组
        for(int i = 0; i < len-1; i++) {
            // 用于向后冒泡,依次交换大值
            for(int j = 0; j < len - i - 1; j++) {
                if(arr[j] > arr[j+1]){
                    swap(arr, j, j+1);
                }
            }
        }
        return;
    }
    
    public static void swap(int[] arr, int n, int m) {
        int temp = arr[n];
        arr[n] = arr[m];
        arr[m] = temp;
    }
}

使用场景

由于冒泡排序的效率较低,适用于待排序数组规模较小的情况。在实际应用中,冒泡排序更常用作算法学习和理解的示例。