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 有什么问题可以给我留言噢~
  • 相关阅读:
    ExplorerControls的显示问题
    VS选项中没有C#相关设置选项?
    根据点提取栅格值
    原来我的代码暴露在外面!
    .NET反编译之manager,base.AutoScaleMode修复
    无法加载Dll”ArcGISVersion.dll”:0x8007007E
    ArcEngine9.3迁移至ArcObject10.1
    地籍宗地出图(二)
    地籍宗地出图(一)
    CAD设置图层透明显示
  • 原文地址:https://www.cnblogs.com/flyingcr/p/10428319.html
Copyright © 2011-2022 走看看