交换排序之冒泡排序

原理:将序列划分为无序和有序区,不断通过交换较大元素至无序区尾完成排序。
要点:设计交换判断条件,提前结束以排好序的序列循环。

    private static void sortBubble(int[] array) {
        boolean isSort = true;
        for (int i = 1; i < array.length && isSort; i++) {
            isSort = false;  //是否需要排序
            for (int j = 0; j < array.length - 1; j++) {
                if (array[j] > array[j + 1]) {    //降序只需将>改为<
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                    isSort = true;
                }
            }
            printArray(String.format(Locale.getDefault(), "第 %2d 趟 : ", i), array);
        }
    }

结果:

原数组:  55  22  66  33  11  99  77  44  88
冒泡排序:
第  0 趟 :   22  55  33  11  66  77  44  88  99
第  1 趟 :   22  33  11  55  66  44  77  88  99
第  2 趟 :   22  11  33  55  44  66  77  88  99
第  3 趟 :   11  22  33  44  55  66  77  88  99
第  4 趟 :   11  22  33  44  55  66  77  88  99
局部排序
    private static void sortBubble(int[] array, int start, int end) {
        boolean isSort = true;
        end = Math.min(end, array.length);
        for (int i = start; i < end && isSort; i++) {
            isSort = false;
            for (int j = start; j < end - 1; j++) {
                if (array[j] > array[j + 1]) {
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                    isSort = true;
                }
            }
            printArray(String.format(Locale.getDefault(), "第 %2d 趟 : ", i), array);
        }
    }

对数组的【2,7)排序结果:

原数组:  55  22  66  33  11  99  77  44  88
冒泡排序:
第  2 趟 :   55  22  33  11  66  77  99  44  88
第  3 趟 :   55  22  11  33  66  77  99  44  88
第  4 趟 :   55  22  11  33  66  77  99  44  88

你可能感兴趣的:(交换排序之冒泡排序)