zoukankan      html  css  js  c++  java
  • 算法系列之<冒泡排序>

    冒泡排序:

    比较相邻两个元素的关键字值,如果反序,则交换。若按升序排序,每一趟将被扫描的数据序列中的最大元素交换到最后位置,就像气泡从水里冒出来一样。

    复杂度分析:

    数据的初始序列已排序,只需要一趟扫描,比较次数为n,移动次数为0,时间复杂度是O(N)

    数据的初始序列反序排序,需要进行n-1趟扫描,时间复杂度是O(N2)

    冒泡排序的平均时间复杂度是O(N2),每次交换需要一个辅助空间, 空间复杂度是O(1)

    用java实现冒泡排序的代码如下:

     /**
         * 冒泡排序:依次比较相临元素,如果反序则进行交换,经过一趟比较交换之后,最小的元素就会放到最前面的位置,然后第二趟从第二个元素开始进行相同的操作,经过n-1趟比较之后就是排好序的序列
         * case1:null
         * case2:{}
         * case3:{1}
         * case4:{1,2,3,4,5}
         * case5:{5,4,3,2,1}
         * case6:{1,5,4,3,8}
         * 经过n-1趟比较,第i趟比较n-i次
         * 最坏情况是序列反序,时间复杂度O(n^2),空间复杂度O(1)
         * 最好情况是序列已正序排好,时间复杂度O(N),空间复杂度O(1)
         * 平均复杂度O(n^2),空间复杂度O(1)
         * @param array1
         */
        public static void bubbleSort(int[] array1){
            if(array1!=null) {
                int n = array1.length;
                if (n > 1) {
                    boolean isExchange = true;
                    for (int i = 1; isExchange&&i <= n - 1; i++) {
                        isExchange = false;
                        for (int j = 0; j <= n - 1 - i; j++) {
                            if (array1[j] > array1[j + 1]) {
                                int temp = array1[j];
                                array1[j] = array1[j + 1];
                                array1[j + 1] = temp;
                                isExchange = true;
                            }
                        }
                    }
    
                }
            }
        }
  • 相关阅读:
    java soket 和nio
    面试题中问到 aop di ioc 怎么回答
    细谈hashmap
    java中length和length()还有size()的区别
    MySQL 中实现可重复读(RR)的原理--MVCC
    关于字节流/字符流操作文件的问题
    MySQL 中索引优化(即避免索引失效)
    MySQL 数据库中索引的实现 和 建立索引的原则
    CAS和ABA问题
    Volatile的简单理解
  • 原文地址:https://www.cnblogs.com/zhaijing/p/9775723.html
Copyright © 2011-2022 走看看