【算法与数据结构】冒泡排序

前言:算法讲究的是逻辑思维,然后再用代码去实现你的逻辑,因此,你的逻辑思维很重要。

int[] array = {22, 33, 12, 54, 8, 90, 66, 7};
冒泡排序的逻辑:
第一次遍历:首先拿下标0位置的数据和下标1位置的数据作比较,大的数据往后排;然后1位置的数据和2位置的数据作比较,大的数据往后排,以此类推,遍历到n-1的数据;
第一次排完序的结果:{22, 12, 33, 8, 54, 66, 7, 90}

第二次遍历:拿下标0位置的数据和下标1位置的数据作比较,大的数据往后排;然后1位置的数据和2位置的数据作比较,大的数据往后排,以此类推,遍历到n-2的数据;
第二次排完序的结果:{12, 22, 8, 33, 54, 7, 66, 90}

第三次遍历:拿下标0位置的数据和下标1位置的数据作比较,大的数据往后排;然后1位置的数据和2位置的数据作比较,大的数据往后排,以此类推,遍历到n-3的数据;
第三次排完序的结果:{12, 8, 22, 33, 7, 54, 66, 90}

....

第N次排完序的结果:{7, 8, 12, 22, 33, 54, 66, 90}

总结规律:冒泡排序是两两交换比较大小,大的往后排,第一次遍历完后数组最大的数在最后面,即在数组下标为n-1的位置,第二次遍历只需要遍历到n-2的位置就可以了。

话不多说,上代码:

public static void main(String[] args) {
        int[] array = {22, 33, 12, 54, 8, 90, 66, 7};
        bubbleSort(array);
        printArray(array);
    }

    /**
     * 冒泡排序
     *
     * @param array 需要排序的数组
     */
    private static void bubbleSort(int[] array) {
        if (array == null || array.length < 2) {
            return;
        }
        int len = array.length;
        for (int i = 0; i < len; i++) {
            for (int j = 1; j < len - i; j++) {
                if (array[j] < array[j-1]) {
                    int temp = array[j];
                    array[j] = array[j-1];
                    array[j-1] = temp;
                }
            }
        }
    }

    /**
     * 打印数组
     *
     * @param array 需要打印的数组
     */
    private static void printArray(int[] array) {
        for (int i : array) {
            System.out.print(i + " ");
        }
        System.out.println();
    }

运行结果:

 


版权声明:本文为qq_38023862原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。