排序算法—冒泡排序—Java

举报
@小红花 发表于 2022/02/18 12:19:52 2022/02/18
【摘要】 1、基本思想冒泡排序(Bubble Sort)是一种交换排序,它的基本思想是:两两比较相邻的数,如果前面的数大于后面的数,则交换两个数的值。每一轮排序都会找到本轮交换过程中的最大值(也可以是最小值)。2、简单数据的排序过程/* 待排序数据:[7,4,3,6,1] 第一轮排序: [4,7,3,6,1] // 比较7和4,7大于4,交换位置 ...

1、基本思想

冒泡排序(Bubble Sort)是一种交换排序,它的基本思想是:两两比较相邻的数,如果前面的数大于后面的数,则交换两个数的值。每一轮排序都会找到本轮交换过程中的最大值(也可以是最小值)。

2、简单数据的排序过程

/*
    待排序数据:[7,4,3,6,1]
        第一轮排序:
            [4,7,3,6,1]  // 比较7和4,7大于4,交换位置
            [4,3,7,6,1]  // 比较7和3,7大于3,交换位置
            [4,3,6,7,1]  // 比较7和6,7大于6,交换位置
            [4,3,6,1,7]  // 比较7和1,7大于1,交换位置
        第二轮排序:
            [3,4,6,1,7]  // 比较4和3,4大于3,交换位置
            [3,4,6,1,7]  // 比较4和6,4小于6,不交换位置
            [3,4,1,6,7]  // 比较6和1,6大于1,交换位置      因为在上一轮中找到最大值7,所以本轮排序将不对7进行排序
        第三轮排序:
            [3,4,1,6,7]  // 比较3和4,3小于4,不交换位置
            [3,1,4,6,7]  // 比较4和1,4大于1,交换位置      因为在上一轮中找到最大值6,所以本轮排序将不对6进行排序
        第四轮排序:
            [1,3,4,6,7]  // 比较3和1,3大于1,交换位置      排序完成
*/

3、代码实现

    //冒泡排序
    public static void bubbleSort(int[] arr){
        //为方便交换数据的值,声明的临时变量
        int temp = 0;
        //定义一个标记变量,检测本轮排序是否交换过数据
        boolean flag = false;
        //进行 (数据个数 - 1)轮排序
        for(int i = arr.length - 1;i > 0;i--){
            //第i轮排序,需要比较(i - 1)次
            for(int j = 0;j < i;j++){
                //按照从小到大的顺序排序
                //当前面的数值比后面的数值大,则交换
                if(arr[j] > arr[j + 1]){
                    temp = arr[j + 1];
                    arr[j + 1] = arr[j];
                    arr[j] = temp;
                    //已交换
                    flag = true;
                }
            }
            //如果本轮未交换数据,表示排序完成
            if(!flag){
                break;
            }
        }
    }
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。