• 冒泡排序以及冒牌排序优化算法


    冒泡排序是最常用的排序算法,在笔试中也非常常见,能手写出冒泡排序算法可以说是基本的素养。

    算法重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,这样越大的元素会经由交换慢慢“浮”到数列的顶端。

    时间复杂度

    算法稳定性

    冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。

    冒泡排序算法的运作如下

          1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。

          2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

          3. 针对所有的元素重复以上的步骤,除了最后一个。

          4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比

    一、冒泡排序的基础算法:

    package aa;
    
    import java.lang.reflect.Array;
    import java.util.Arrays;
    public class Test06 {
        public static void bubbleSort(int[] a){
            int temp;
            for (int i = 0; i < a.length; i++) {
                for (int j = 0; j < a.length-i-1; j++) {
                    if(a[j]>a[j+1]){
                        temp = a[j];
                        a[j] = a[j+1];
                        a[j+1] = temp;
                    }
                }
            }
        }
        public static void main(String[] args) {
            int[] values = { 3, 1, 6, 2, 9, 0, 7, 4, 5, 8 };
            bubbleSort(values);
            System.out.println(Arrays.toString(values));
        }
    }

    二、冒泡排序优化算法

     其实,我们可以把7.6.1的冒泡排序的算法优化一下,基于冒泡排序的以下特点:

          1.整个数列分成两部分:前面是无序数列,后面是有序数列。

          2.初始状态下,整个数列都是无序的,有序数列是空。

          3.每一趟循环可以让无序数列中最大数排到最后,(也就是说有序数列的元素个数增加1),也就是不用再去顾及有序序列。

          4.每一趟循环都从数列的第一个元素开始进行比较,依次比较相邻的两个元素,比较到无序数列的末尾即可(而不是数列的末尾);如果前一个大于后一个,交换。

          5.判断每一趟是否发生了数组元素的交换,如果没有发生,则说明此时数组已经有序,无需再进行后续趟数的比较了。此时可以中止比较。

     1 import java.util.Arrays;
     2 public class Test1 {
     3     public static void main(String[] args) {
     4         int[] values = { 3, 1, 6, 2, 9, 0, 7, 4, 5, 8 };
     5         bubbleSort(values);
     6         System.out.println(Arrays.toString(values));
     7     }
     8     public static void bubbleSort(int[] values) {
     9         int temp;
    10         int i;
    11         // 外层循环:n个元素排序,则至多需要n-1趟循环
    12         for (i = 0; i < values.length - 1; i++) {
    13             // 定义一个布尔类型的变量,标记数组是否已达到有序状态
    14             boolean flag = true;
    15     /*内层循环:每一趟循环都从数列的前两个元素开始进行比较,比较到无序数组的最后*/
    16             for (int j = 0; j < values.length - 1 - i; j++) {
    17                 // 如果前一个元素大于后一个元素,则交换两元素的值;
    18                 if (values[j] > values[j + 1]) {
    19                     temp = values[j];
    20                     values[j] = values[j + 1];
    21                     values[j + 1] = temp;
    22                        //本趟发生了交换,表明该数组在本趟处于无序状态,需要继续比较;
    23                     flag = false;
    24                 }
    25             }
    26            //根据标记量的值判断数组是否有序,如果有序,则退出;无序,则继续循环。
    27             if (flag) {
    28                 break;
    29             }
    30         }
    31     }
    32 }

     

    三.debug命令调试

    •     在需要断点的行数前面进行点击(打断点)

    •     右键单击Debug模式运行

    •     F8快捷键依次执行代码

  • 相关阅读:
    Python中所有的关键字
    关于selenium的8种元素定位
    对提示框的操作
    selenium+webservice进行百度登录
    MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled...报错解决
    Vue中使用echarts
    npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142解决方法
    插入排序
    冒泡排序优化
    roject 'org.springframework.boot:spring-boot-starter-parent:XXX' not found 解决
  • 原文地址:https://www.cnblogs.com/qiaoxin11/p/12555306.html
Copyright © 2020-2023  润新知