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

Java 冒泡排序

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

Java 冒泡排序

 

数组的排序:冒泡排序

int[] array = {40, 17, 21, 1}; // 1, 17,21,40

第一轮:40冒到最右边

17,40,21,1

17,21,40,1

17,21,1,40   -------   40 冒出来

第二轮:21冒出来

17,21,1,40

17,1,21,40  -------   21冒出来

第三轮:17冒出来

1,17,21,40  ------- 17冒出来

所以最多需要排4-1=3次

也就是外层循环只需 array.length - 1 次

外层循环每进行一次说明已经有一个最大的排到最后正确的位置

所以内层循环就可以少操作一次

即内层循环j 每次操作 array.length - 1 - i 次

优化:某一次内层循环进行后所有数字位置没有改变,则说明已经排序好

这是结束程序即可

public void bubbleSort(int[] array) {
    if (array == null || array.length <= 1) {
        return;
    }


    boolean flag = false;// 优化,用于一次内层遍历没有变化时提前结束程序
    
    //主要部分
    //外层循环控制遍历次数
    for (int i = 0; i < array.length - 1; i++) {
        flag = false;
    //内层循环一次代表冒出一个泡,即一个最大值排好
        for (int j = 0; j < array.length - i - 1; j++) {
            if (array[j] > array[j + 1]) {
                swap(array, j, j + 1);//交换
            }
        }
        if (!flag) {// 提前结束,flag如果没被改变说明已经排好(优化)
            break;
        }
    }
}


//交换数组两个位置的元素
public void swap(int[] array, int location1, int location2) {
    array[location1] += array[location2];
    array[location2] = array[location1] - array[location2];
    array[location1] -= array[location2];
}

另外,因为,数组类型是封装数据类型(引用数据类型),不需要return,主函数就能知道传过来的数组改变了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1014909.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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