• 数组的冒泡排序


    冒泡排序算法的原理如下:
    1.比较相邻的元素。如果第一个比第二个大,就交换他们两个,否则不交换
    2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。做完这一步,最后的元素应该会是最大的数。
    3.针对所有的元素重复以上的步骤,除了最后一个。
    4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

     例如:给定int[] arr={13,46,22,65,3},定义一个方法将数组冒泡排序,并打印    

    分析过程 
    第一轮比较: 里面比较了四次                        i=0时;j=0,1,2,3,(即j=0;j<4;j++)
           {13,46,22,65,3}   13<46   不交换  arr[0]与arr[1]--->j=0:arr[j]与arr[j+1]比较
           {13,46,22,65,3}   46>22   交换    arr[1]与arr[2]--->j=1:arr[j]与arr[j+1]比较
           {13,22,46,65,3}   46<65   不交换  arr[2]与arr[3]--->j=2:arr[j]与arr[j+1]比较
           {13,22,46,65,3}   65>3    交换    arr[3]与arr[4]--->j=3:arr[j]与arr[j+1]比较
           最终排序{13,22,46,3,65}得出第一个最大数65

    第二轮比较:里面比较了三次                         i=1时;j=0,1,2,(即j=0;j<3;j++)     
           {13,22,46,3}    13<22  不交换   arr[0]与arr[1]--->j=0:arr[j]与arr[j+1]比较
           {13,22,46,3}    22<46  不交换   arr[1]与arr[2]--->j=1:arr[j]与arr[j+1]比较
           {13,22,46,3}    46>3   交换       arr[2]与arr[3]--->j=2:arr[j]与arr[j+1]比较
           最终排序{13,22,3,46}得出次大数46

    第三轮比较:里面比较了两次                        i=2时;j=0,1,(即j=0;j<2;j++)
           {13,22,3}   13<22   不交换     arr[0]与arr[1]--->j=0:arr[j]与arr[j+1]比较
           {13,22,3}   22>3     交换        arr[1]与arr[2]--->j=1:arr[j]与arr[j+1]比较
           最终排序{13,3,22}得出第三个大的元素是22

    第四轮比较:里面比较了一次                       i=3时;j=0,(即j=0;j<1;j++)
           {13,3}   13>3    交换     arr[0]与arr[1]----->j=0:arr[j]与arr[j+1]比较
           最终排序{13,3,22}得出第四个大的元素是13

    如果用i表示比较轮数,用j表示每轮里面比较的次数,肯定要用到嵌套循环
    arr.length=5
    i=0时;j=0,1,2,3,(即j=0;j<4;j++)  0+4=arr.length-1
    i=1时;j=0,1,2,  (即j=0;j<3;j++)  1+3=arr.length-1
    i=2时;j=0,1,    (即j=0;j<2;j++)  2+2=arr.length-1       得出=arr.length-1-i
    i=3时;j=0,      (即j=0;j<1;j++)  3+1=arr.length-1
    可以看出外层i=0;i<arr.length-1;i++,而里层j=0;j<;j++,?=4,3,2,1不断递减,可以看出外层i
    在递增时,里层j<?而?在递减,最终得出得出?=arr.length-1-i,最终结果是
    i=0;i<arr.length-1;i++,    j=0;j<arr.length-1-i;j++,

    代码实现如下:
    public class Demo4 {
        public static void main(String[] args){
        //1.定义一个数组
            int[] arr={13,46,22,65,3};

        //2.调用bubbleSort方法
            bubbleSort(arr);
         
        //3.打印排序完的数组,即数组遍历
        for(int i=0; i<arr.length; i++){
               System.out.println(arr[i]);
                     }
        }


        //2.定义一个方法用冒泡排序将数组从小到大排序
        //参数:整个方法里面唯一可变的量就是数组,对数组排序,数组是外部给的,可变的
        //返回值:最终结果是将整个数组重新排序,不需要求值,所以没有返回值
        public static void bubbleSort(int[] arr){
            for(int i=0; i<arr.length; i++){//控制比较的轮数,即数组长度-1,所以i<arr.length
                      for(int j=0; j<arr.length-1-i; j++){//控制每轮里面比较的次数
                          if(arr[j]>arr[j+1]){//如果第一个比第二个大,就交换他们两个
                               int temp=arr[j];
                              arr[j]=arr[j+1];
                              arr[j+1]=temp; 

                         }  
                      }
               }
        }
    }

  • 相关阅读:
    Spring的PropertyPlaceholderConfigurer
    关于解决java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoader问题
    CentOS7.x安装flash
    C#——list列表复制
    C#——dataGridView控件获取当前鼠标所在的行
    C#——button按钮风格(按下改变)
    C#——chart控件坐标轴刻度细分(副刻度)
    C#——USBHID上位机开发(win10、win7)
    C#——自定义控件工具箱图标
    C#——给线程传递参数的三种方式
  • 原文地址:https://www.cnblogs.com/qiaoqiaoli/p/10746359.html
Copyright © 2020-2023  润新知