java算法:冒泡排序

2023-03-27  本文已影响0人  Bfmall

每次冒泡过程都是从数列的第一个元素开始,然后依次和剩余的元素进行比较, 跟列队一样, 从左到右两两相邻的元素比大小, 高的就和低的换一下位置. 最后最高(值最大)的肯定就排到后面了.

但是这只是把最高的排到后面了, 还得找出第二高的, 于是又从第一个开始两两比较, 高的往后站, 然后第二高的也到后面了.

然后是第三高的再往后排…


image.png

代码实现:

/**
     * 冒泡排序
     */
    public void bubbleSort01() {
        int[] arr = {4,1,3,6,2,5};
        /**
         * 原始数组:{4,1,3,6,2,5}
         * 每轮第几次比较   第一次比较  ->   第二次比较   ->   第三次比较   ->   第四次比较    ->  第五次比较
         * 第一轮:      {1,4,3,6,2,5}-> {1,3,4,6,2,5} -> {1,3,4,6,2,5} -> {1,3,4,2,6,5} -> {1,3,4,2,5,6}
         * 第二轮:      {1,3,4,2,5,6}-> {1,3,4,2,5,6} -> {1,3,2,4,5,6} -> {1,3,2,4,5,6} -> {1,3,2,4,5,6}
         * 第N轮:如此下去
         */
        for (int i=0;i<arr.length - 1;i++) {//共比较几轮
            for (int j = 0;j < arr.length - 1 - i;j++) {//每轮比较(arr.length-1-i)次
                //每轮中相邻的元素进行比较,如果前面的元素比后面的元素大,则交换位置
                if (arr[j] > arr[j+1]) {
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
            Log.i(TAG, "第"+(i+1)+"轮,i="+i+", arr="+Arrays.toString(arr));
        }
        Log.i(TAG, "冒泡排序结果:arr="+Arrays.toString(arr));
    }

输出结果:

第1轮,i=0, arr=[1, 3, 4, 2, 5, 6]
第2轮,i=1, arr=[1, 3, 2, 4, 5, 6]
第3轮,i=2, arr=[1, 2, 3, 4, 5, 6]
第4轮,i=3, arr=[1, 2, 3, 4, 5, 6]
第5轮,i=4, arr=[1, 2, 3, 4, 5, 6]
第6轮,i=5, arr=[1, 2, 3, 4, 5, 6]
冒泡排序结果:arr=[1, 2, 3, 4, 5, 6]
上一篇 下一篇

猜你喜欢

热点阅读