冒泡排序

冒泡排序原理:

  从左往右,依次比较相邻两个元素的大小,如果第一个元素大于第二个元素,就进行交换位置,第一轮比较结束就会将最大的元素放到最后;

  再进行除了最后一个元素之外的元素的比较,确定第二大的元素,放到倒数第二的位置上;

  继续上述比较,直到只剩最后一个元素需要比较为止;

示例说明:

  对于数组[36,76,44,21,66,18]来说,

  第一轮:

    36<76,不用交换位置;

    76<44,交换位置,数组变为[36,44,76,21,66,18];

    76>21,交换位置,数组变为[36,44,21,76,66,18];

    76>66,交换位置,数组变为[36,44,21,66,76,18];

    76>18,交换位置,数组变为[36,44,21,66,18,76];

    可见最大的元素已经确定,而且不用再参加比较,数组变为[36,44,21,66,18,76].

  第二轮:

    36<44,不用交换位置;

    44>21,交换位置,数组变为[36,21,44,66,18,76];

    44<66,不用交换位置;

    66>18,交换位置,数组变为[36,21,44,18,66,76];

    可见除了第一轮最大的元素之外的最大元素也确定了位置,数组变成[36,21,44,18,66,76],

  第三轮: 

    36>21,交换位置,数组变为[21,36,44,18,66,76];

    36<44,不用交换位置;

    44>18,交换位置,数组变为[21,36,18,44,66,76];

    第三大的元素确定了位置,数组变成[21,36,18,44,66,76].

  第四轮:

    25<36,不用交换位置;

    36>18,交换位置,数组变成[25,18,36,44,66,76];

    第四大的元素确定了位置,数组变成[25,18,36,44,66,76].

  第五轮:

    25>18,交换位置,数组变成[18,25,36,44,66,76];

    这时就剩下了最后一个元素25没确定位置,而且不需要再比较,那么排序后的数组就为[18,25,36,44,66,76].

总结:

  从示例中可以看出,6个元素之间只需要(元素数-1)轮的比较,每一轮中的比较次数为(元素数-轮数)

Java代码实现:

复制代码
package com.yg.study;

public class BubbleSort {

    public static void main(String[] args) {
        int[] arr= {36,76,44,21,66,18};
        doSort(arr);
        System.out.println("=============排序结果展示===============");        //可以去掉    
        for (int i : arr) {
            System.out.print(i+"\t");
        }
    }

    private static void doSort(int[] arr) {
        for(int i=0;i<arr.length-1;i++) {        //-1是确定要比较的轮数
            System.out.println("************第"+(i+1)+"轮比较************");        //用于区分每一轮比较结果,可以去掉
            for (int j = 0; j < arr.length-1-i; j++) {        //-1是为了防止数组下标越界,-i是用于排除最后一个元素参与比较
                if(arr[j]>arr[j+1]) {        //如果前一个元素大于后一个元素,进行位置交换
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
                
                for (int k : arr) {        //用于打印每一次比较的结果,可以去掉
                    System.out.print(k+"\t");
                }
                System.out.println();    //用于区分每一次比较的结果,可以去掉
            }
        }
        
    }

}
复制代码

 

 

结果展示:

 

  

    

 

posted @   安徒生敲代码  阅读(199)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示