Bubble sort I understand

package demo09;

import java.util.Arrays;

/**
 * @Author: micro cloud fly
 * @Description: 冒泡排序
 * @Date: Created in 4:39 下午 2020/9/27
 */
public class Test {
    public static void main(String[] args) {

        int[] arr = new int[]{
                1, 90, 9, 8, 5, 7, 10
        };
        System.out.println(Arrays.toString(mySort(arr)));
    }

    /**
     * 我理解的冒泡排序
     * @param arr
     * @return
     */
    public static int[] mySort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return arr;
        }
        for (int i = 0; i < arr.length - 1; i++) {
            System.out.println("第 --i--" + i + "次排序:" + Arrays.toString(arr));
            //第一轮,我取出第一个值和第二个值进行比较
            //如果第一个值大于第二个值,那么他们的位置进行交换
            //然后第一个值和第三个值进行比较,如果第一个值大于第三个,继续进行交换
            //那么此时,第一轮过后,数组的第一个值就应该是最小的那个数字了
            
            //-------------
            //第二轮,我取出第二个值和第三个值进行比较
            //如果第二个值大于第三个值,那么他们的位置进行交换
            //然后第二个值和第4个值进行比较,如果第二个值大于第四个,继续进行交换
            //那么此时,第二轮过后,数组的第二个值就应该是第二小的那个数字了
            
            //--------
            //直到最后一轮,最大的数字就在最后面了
            //我的思想跟老师教的思想的不同点就是,老师教的每一轮比较大小都把最大的数字放在最后面,
            //而如果我的代码的if (arr[i] > arr[j]) 改为if (arr[i] < arr[j]),那么我的思想就是每一轮比较把最大的值放在最前面
            for (int j = i + 1; j < arr.length; j++) {
                int x = arr[i];
                int y = arr[j];
                if (arr[i] < arr[j]) {
                    arr[j] = x;
                    arr[i] = y;
                }
                System.out.println("第  --j--" + i + "次排序:" + Arrays.toString(arr));
            }
            System.out.println("-----------------------------------------------");

        }
        return arr;
    }

    /**
     * 老师教的冒泡排序
     * @param arr
     * @return
     */
    private static int[] bubbleSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return arr;
        }
        for (int i = 0; i < arr.length - 1; i++) {
            System.out.println("第 --i--" + i + "次排序:" + Arrays.toString(arr));

            for (int j = 0; j < arr.length - i - 1; j++) {   // 这里说明为什么需要-1
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
                System.out.println("第  --j--" + i + "次排序:" + Arrays.toString(arr));

            }
            System.out.println("-----------------------------------------------");

        }
        return arr;
    }
}

 

Guess you like

Origin blog.csdn.net/silk_java/article/details/108833247