A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. <blockquote><blockquote><blockquote><blockquote>/*
复制代码

评分

参与人数 1黑马币 +10 收起 理由
shuide + 10 神马都是浮云

查看全部评分

3 个回复

正序浏览
holy high , 好好学习, 楼主加油, 向楼主看齐
回复 使用道具 举报
真高端真厉害
回复 使用道具 举报


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();
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马