zoukankan      html  css  js  c++  java
  • Java实现冒泡排序

    首先我们先了解一下什么是冒泡排序
    冒泡排序:就是给定一个数组,然后依次从左到右相邻的两个数两两比较,如果是升序排列,如果前面一个数大于后面一个数就交换位置,直到遍历到最后一个,然后进行第二轮的比较,第二轮的比较仍然从第一数开始,进行两两比较,然后进行第三轮,依次类推
    下面我们举例来具体阐述一下:
    给定一个数组,进行排序:2,6,1,3,8,5从小到大的顺序排列
    第一轮:遍历整个数组,相邻两个两两比较,如果前面大于后面,就交换
    2,6,1,3,8,5—>2,1,6,3,8,5—》2,1,3,6,8,5—》2,1,3,6,8,5—-》2,1,3,6,5,8
    那么第一轮比较就结束了最后的结果:2,1,3,6,5,8
    那么我们用代码实现这个过程
    在这个之前我们先了解一下Java中数组类型的变量的声明和赋值以及遍历打印

    //先定义一个数组,由于数组是对象,所以定义的时候应该new一下
     //在定义数组的同时进行快速赋值
         int[] num = new int[]{2,6,1,3,8,5};
         System.out.println(num);//这里打印只是一个数组的引用的地址
         //遍历的方法打印数组
         for(int i=0;i<num.length;i++){
             System.out.print(num[i]+",");
         }
         System.out.println("
    ");
         //foreach的方法快速打印和遍历数组
         //这里的i表示的数组的每一个元素的值,而不是下标
         for(int i:num){
             System.out.print(i+",");
         }
         System.out.println("
    ");
         //字符数组的声明和遍历打印
         String[] str= new String[]{"hello","world"};
         for(String i:str){
             System.out.println(i+",");
         }
    

    下面我们实现第一轮

    //定义一个数组并进行快速赋值
           int[] num = new int[]{2,6,1,3,8,5};
           //升序排列
           //两两比较
           int temp;
           for(int i=0;i<num.length-1;i++){
               //一定要注意我们后面比较的是i和i+1
               //所以这里的i的终止条件为num.length-1
               //防止溢出
               if(num[i]>num[i+1]){
                   temp=num[i];
                   num[i]=num[i+1];
                   num[i+1]=temp;
               }
           }
        for(int i:num){
            System.out.print(i+" ");
        }
        ---》2 1 3 6 5 8 
     //定义一个数组并进行快速赋值
           int[] num = new int[]{6,5,4,3,2,1};
           for(int i:num){
               System.out.print(i+" ");
           }
           System.out.println("
    ");
           //升序排列
           //两两比较
           int temp;
           int count=0;
           for(int j=0;j<num.length-1;j++){
               //如果将每次循环的结果打印出来我们可以看到
               //事实上外层循环只需要num.length-1次就行了
               for(int i=0;i<num.length-j-1;i++){
                   //这里第一轮将最大值移动到了最后,
                   //所以第二轮只需要比较前面五个数就行了
                   //所以内层循环就是num.length-1
                   //一定要注意我们后面比较的是i和i+1
                   //所以这里的i的终止条件为num.length-1
                   //防止溢出
                   if(num[i]>num[i+1]){
                       temp=num[i];
                       num[i]=num[i+1];
                       num[i+1]=temp;
                   }
               }
               count++;
               System.out.print("第"+count+"次:");
            for(int i:num){
                System.out.print(i+" ");
    
            }
            System.out.println("
    ");
           }
          这里我们利用最坏的结果来举例 6 5 4 3 2 1 ,将它从小到大的顺序排列
    
    第1次:5 4 3 2 1 62次:4 3 2 1 5 63次:3 2 1 4 5 64次:2 1 3 4 5 65次:1 2 3 4 5 6 

    对于冒泡排序我们的思路就是要先写内层循环,然后再写外层循环,内层循环的次数是随着循环的进行而减少的,最后一次我们只需要比较两个数就行了,然后对于外层循环,同样也是只需要length-1就行了,我们可以通过将每次的循环结果打印出来就可以知道

    欢迎关注我的公众号:小秋的博客 CSDN博客:https://blog.csdn.net/xiaoqiu_cr github:https://github.com/crr121 联系邮箱:rongchen633@gmail.com 有什么问题可以给我留言噢~
  • 相关阅读:
    JavaScript实现类的private、protected、public、static以及继承
    OSS网页上传和断点续传(STSToken篇)
    OSS网页上传和断点续传(OSS配置篇)
    Linq sum()时遇到NULL
    SQLSERVER事务日志已满 the transaction log for database 'xx' is full
    笔记本高分辨软件兼容问题,字体太小或模糊
    H5上传图片之canvas
    An error occurred while updating the entries. See the inner exception for details.
    无限级结构SQL查询所有的下级和所有的上级
    SQLserver 进程被死锁问题解决
  • 原文地址:https://www.cnblogs.com/flyingcr/p/10428319.html
Copyright © 2011-2022 走看看