黑马程序员技术交流社区

标题: 双向冒泡!!一个冒泡排序的升级版 [打印本页]

作者: Sniper-L    时间: 2015-10-11 22:23
标题: 双向冒泡!!一个冒泡排序的升级版
  1. <blockquote><blockquote><blockquote><blockquote>/*
复制代码


作者: Sniper-L    时间: 2015-10-11 22:25


public class DoubleBubbleSortTest {
               
        public static void main(String[] args) {
                int[] arr = { 15, 3, 65, 39, 36, 97, 56, 47, 29, 66 };

                System.out.println("数组排序前:");
                printArray(arr);

                doubleBubbleSort(arr);

                System.out.println("\n数组排序后:");
                printArray(arr);
        }
        /**
         * 双向冒泡排序
         * 在每一趟排序中,正向冒泡排序将剩余所有元素中较大的元素,冒至剩余元素最右端,
                                           反向冒泡排序将剩余所有元素中较小的元素,冒至剩余元素最左端
         */
        public static void doubleBubbleSort(int[] arr) {
                int length = arr.length;
                for (int i = 0, j; i < length / 2; i++) { // N个数需N/2趟
                        for (j = i; j < length - 1 - i; j++) { // 每趟需要比较N-i次比较
                                if (arr[j] > arr[j + 1]) {
                                        swap(arr, j, j + 1);
                                }
                                System.out.println("第" + (i + 1) + "次正向冒泡,排序结果:");
                                printArray(arr);
                        }
                        System.out.println();
                        // 添加一层循环,同时从右至左,则每当此for循环结束,较小的数往左边冒出
                        for (--j; j > i; j--) {
                                if (arr[j - 1] > arr[j]) {
                                        swap(arr, j - 1, j);
                                }
                                System.out.println("第" + (i + 1) +"次反向冒泡,排序结果:");
                                printArray(arr);
                        }
                        System.out.println("");
                }
        }

        /**
         * 交换数组中x、y下标指向的元素值
         */
        private static void swap(int[] arr, int x, int y) {
                int temp = arr[x];
                arr[x] = arr[y];
                arr[y] = temp;
        }

        /**
         遍历数组然后打印
        */
        private static void printArray(int[] arr) {
                for (int i = 0; i < arr.length; i++) {
                        System.out.print("\t" + arr[i]);
                }
                System.out.println();
        }
}

作者: iceknc    时间: 2015-10-11 22:32
真高端真厉害
作者: blensmile    时间: 2015-10-12 11:32
holy high , 好好学习, 楼主加油, 向楼主看齐




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2