算法系列之<冒泡排序>

冒泡排序:

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

复杂度分析:

数据的初始序列已排序,只需要一趟扫描,比较次数为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;
                        }
                    }
                }

            }
        }
    }

猜你喜欢

转载自www.cnblogs.com/zhaijing/p/9775723.html