Java基础学习:数组08(冒泡排序:必须掌握)

Java基础学习:数组08(冒泡排序:必须掌握)

  • 冒泡排序:

    • 冒泡排序无疑是最为出名的排序算法之一,总共有8大排序;

    • 冒泡的代码还是相当简单的,2曾循环,外层冒泡轮数,里层依次比较,江湖中人尽皆知;

    • 我们看到嵌套循环,应该立马就可以得出这个算法的时间复杂度为O(n2)

       

  • 代码例子:

    public class ArrayDemo07 {
      public static void main(String[] args) {
          //冒泡排序:必会

          int[] arr={1,5,3,7,9,4};
          int[] arr1=sort(arr);
          System.out.println(Arrays.toString(arr1));


      }

      //冒泡排序
      /**
        * 核心思路:
        *
        * 1,比较数组中,相邻的2个数组元素;如果第一个数比第二个数大,我们就交换他们的位置;
        * 2,每一次比较,都会产生出一个最大,或者最小的数;
        * 3,下一轮则, 可以少一次排序;
        * 4,依次循环,直到结束;
        */

      public static int[] sort(int[] array){
          //临时变量:负责交换数据
          int temp=0;
          //外层循环:判断我们这个要走多少次
          for (int i = 0; i < array.length-1; i++) {
              //内层循环,比较2个数,如果第一个数比第二个数大,我们就交换他们的位置
              for (int j = 0; j < array.length-1-i; j++) {
                  if(array[j]>array[j+1]){
                      temp=array[j+1];
                      array[j+1]=array[j];
                      array[j]=temp;
                  }
              }
          }
          return array;
      }
       
    }

     

  • 思考:如何优化?

    • 优化代码:

      public class ArrayDemo07 {
         public static void main(String[] args) {
             //冒泡排序:必会

             int[] arr={1,5,3,7,9,4};
             int[] arr1=sort(arr);
             System.out.println(Arrays.toString(arr1));


        }

         //冒泡排序
         /**
          * 核心思路:
          *
          * 1,比较数组中,相邻的2个数组元素;如果第一个数比第二个数大,我们就交换他们的位置;
          * 2,每一次比较,都会产生出一个最大,或者最小的数;
          * 3,下一轮则, 可以少一次排序;
          * 4,依次循环,直到结束;
          */

         public static int[] sort(int[] array){
             //临时变量:负责交换数据
             int temp=0;

             //外层循环:判断我们这个要走多少次
             for (int i = 0; i < array.length-1; i++) {

                 boolean flag=false;//通过flag标识位减少没有意义的比较
                 //内层循环,比较2个数,如果第一个数比第二个数大,我们就交换他们的位置
                 for (int j = 0; j < array.length-1-i; j++) {
                     if(array[j]>array[j+1]){
                         temp=array[j+1];
                         array[j+1]=array[j];
                         array[j]=temp;
                         flag=true;
                    }
                }
                 if(flag==false){//这一轮没有进行比较
                     break;
                }
            }
             return array;
        }

      }

  • 笔记:

    • 冒泡排序,就算背也要背会!必掌握!

    •  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @   gzs1024  阅读(699)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示