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

    @Test
    public void maoPao2(){
    int[] a = {3,8,6,2,15,7};

    //第一层for循环控制对比的轮数
    for(int i=0;i<a.length-1;i++){

    //第二层for循环控制每轮对比的次数

    for(int j=0;j<a.length-1-i;j++){
    if (a[j]>a[j+1]) {
    int t = a[j];
    a[j] = a[j+1];
    a[j+1] = t;
    }
    }
    }
    //通过循环输出排序后的顺序
    for(int i=0;i<a.length;i++){
    System.out.println(a[i]);
    }

    }

    /*实现的思路:

    *第一轮:i=0<6-1
    * j<6-1-0 即j<5
    * j= 0,1,2,3,4 比五次 ,依次比较
    * j=0 <6-1-0 Yes-->a[0]>a[1]? No 数组a 的顺序还是 a={3,8,6,2,15,7}
    * 此时:执行 j++ 得:j=1<5 Yes a[1]>a[2] ? Yes 所以a[1]和a[2]交换位置 ,所以此次比较后a的顺序为:a={3,6,8,2,15,7}
    * 此时:执行 j++ 得:j=2<5 Yes a[2]>a[3]? Yes 所以a[2]和a[3]交换位置,此次比较后a的顺序为:a={3,6,2,8,15,7}
    * 此时:执行 j++ 得:j=3<5 Yes a[3]>a[4]? No 所以a[3]和a[4]无需交换位置,此次比较后a的顺序为:a={3,6,2,8,15,7}
    * 此时:执行 j++ 得:j=4<5 Yes a[4]>a[5]? 即第五个大于第六个吗? No 所以a[4]和a[5]交换位置,此次比较后a的顺序为:a={3,6,2,8,7,15}
    * 此时:执行 j++ 得:j=5<5 No 所以第一轮对比结束,得到的结果是:a的顺序为:a={3,6,2,8,7,15},
    * 即:第一轮对比将最大的一个数排到了最后。
    *此时结束第二层for循环跳到第一层for循环
    *第二轮对比:
    *执行 i++ 得到i=2 < 6-1 Yes
    * 进入第二层for循环
    * j<6-1-1 即j<4 对比四次 j=0,1,2,3
    * 此时:j=0<6-1-1 Yes--> a[0]>a[1]? No 数组a 的顺序还是 a={3,6,2,8,7,15}
    * 此时:执行 j++ 得:j=1<4 Yes a[1]>a[2] ? Yes 所以a[1]和a[2]交换位置 ,所以此次比较后a的顺序为:a={3,2,6,8,7,15}
    * 依次类推。。。
    *得到结果是: a={3,2,6,7,8,15}
    *依次类推:
    *第三轮 i=2 <6-1 Yes j<6-1-2 即 j<3 ,对比三次 j= 0,1,2
    *得到结果是:a={2,3,6,7,8,15}。
    *
    **第四轮 i=3<6-1 j<6-1-3 即 j<2 j= 0,1 比两次
    *得到结果是:a={2,3,6,7,8,15}。、
    *第五轮 i=4 i<5 j<6-1-4 即 j<1 j= 0 比一次
    *得到结果是:a={2,3,6,7,8,15}。
    *第六轮:i=5<5 No 结束
    *留有一个疑问点:当对比进行到第三轮的时候,其实已经排完序了,针对造的数据的特殊性,这时候完全可以跳出循环无需在对比下去了,浪费时间!但该如何判断执行到那一轮已经无需再往下对比了呢?
    */

  • 相关阅读:
    【LeetCode】Hash
    【LeetCode】Heap
    【LeetCode】Stack
    【CodeVS】 纯OI题
    【LeetCode】String
    【LeetCode】Array
    WinForm窗体 常用属性
    C# ADO.NET 实体类中的属性扩展
    C# ADO.NET 三层架构
    C# ADO.NET 数据库的安全(sql 字符串注入攻击、使用占位符防止注入攻击)
  • 原文地址:https://www.cnblogs.com/21heshang/p/7732410.html
Copyright © 2011-2022 走看看