栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

冒泡排序优化算法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

冒泡排序优化算法

冒泡排序

依次比较相邻两个元素的大小,如果a[i]>a[i+1],则交换元素,两两都比较一遍为一轮冒泡,结果让最大元素排在最后。

最初冒泡排序
private static void bubbleSort(int[] arr) {
        for (int i=0;i< arr.length-1;i++){
            for (int j = 0; j < arr.length - 1; j++) {
                if (arr[j]>arr[j+1]){
                    swap(arr,j,j+1);
                }
            }
            System.out.println(Arrays.toString(arr));
        }

    }

    private static void swap(int[] arr, int j, int i) {
        int t=arr[j];
        arr[j]=arr[i];
        arr[i]=t;

    }
优化比较次数
  1. 每轮比较 最后一位肯定是已经排好了,每轮比较次数依次-1

        private static void bubbleSort(int[] arr) {
            for (int i=0;i< arr.length-1;i++){
            	//每轮比较次数-1
                for (int j = 0; j < arr.length - 1 - i; j++) {
                    if (arr[j]>arr[j+1]){
                        swap(arr,j,j+1);
                    }
                }
                System.out.println(Arrays.toString(arr));
            }
        }
    
    
  2. 判断数组有序后提前退出循环,判断是否发生交换

        private static void bubbleSort(int[] arr) {
            for (int i=0;i< arr.length-1;i++){
                boolean swapped=false;//判断是否发生交换
                for (int j = 0; j < arr.length - 1 - i; j++) {
                    if (arr[j]>arr[j+1]){
                        swap(arr,j,j+1);
                        swapped=true;
                    }
                }
                System.out.println(Arrays.toString(arr));
                if(!swapped){
                    break;
                }
            }
        }
    
  3. 保留每轮最后发生交换元素的索引,索引后面的元素都已经有序。如果索引为0,代表整个数组都有序,退出循环。

        private static void bubbleSortV2(int[] arr) {
            int n= arr.length-1;//每轮比较次数
            int i=0;//记录比较轮数
            do {
                int last = 0;//最后一次交换的索引位置
                for (int j = 0; j < n; j++) {
                    System.out.println("比较第" + j + "次");
                    if (arr[j] > arr[j + 1]) {
                        swap(arr, j, j + 1);
                        last = j;
                    }
                }
                n = last;
                System.out.println("第" + (i++) + "轮" + Arrays.toString(arr));
            } while (n != 0);
        }
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/282625.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号