定义

依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

例如有个数组的长度为6,需要从小到大进行排序
第一遍: 下标0和1位置的值比较,如果0位置的值比1大,则交换;下标1和2位置的值比较,如果1位置的值比2大,则交换;下标2和3位置的值比较,如果2位置的值比3大,则交换;下标3和4位置的值比较,如果3位置的值比4大,则交换;下标4和5位置的值比较,如果4位置的值比5大,则交换。至此,第一遍比较完成,此时下标5位置的数一定是最大的,因此后面进行第二遍、第三遍……第n遍时不再需要比较该位置的数。

第二遍: 下标0和1位置的值比较,如果0位置的值比1大,则交换;下标1和2位置的值比较,如果1位置的值比2大,则交换;下标2和3位置的值比较,如果2位置的值比3大,则交换;下标3和4位置的值比较,如果3位置的值比4大,则交换;至此,第二遍比较完成,此时下标4位置的数一定是第二大的,因此后面进行第三遍……第n遍时不再需要比较该位置的数。

......

以此类推

代码示例

public class CodeBubbleSort {

    /**
     * 从小到大排序
     * @param arr
     */
    public static void bubbleSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            // 考虑边界情况,数组为空或者长度小于2,则不用排序
            return;
        }
        int n = arr.length;
        for (int i = 0; i < n; i++) {
            for (int j = 1; j < n - i; j++) {
                if (arr[j - 1] > arr[j]) {
                    int temp = arr[j - 1];
                    arr[j - 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }

    public static void printArr(int[] arr) {
        for (int j : arr) {
            System.out.print(j + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        int[] arr = {5, 1, 6, 11, 10, 9, 45, 1, 6, 7, 9, 12};
        printArr(arr);
        bubbleSort(arr);
        printArr(arr);
    }

}

输出结果

5 1 6 11 10 9 45 1 6 7 9 12 
1 1 5 6 6 7 9 9 10 11 12 45 
最后修改:2024 年 01 月 04 日
如果觉得我的文章对你有用,请随意赞赏