zoukankan      html  css  js  c++  java
  • 算法

    重点:依次对比邻近值,将较大/较小值向一侧移动

    public class BubbleSort<T extends Comparable> {
    
        public void sort(T[] arr) {
            if (arr != null && arr.length > 1) {
                for (int i = 0; i < arr.length; i++) {
                    int j = 0;
                    for (; j < arr.length - 1 - i; j++) {
                        if (arr[j].compareTo(arr[j + 1]) > 0) {
                            T temp = arr[j + 1];
                            arr[j + 1] = arr[j];
                            arr[j] = temp;
                            for (T n : arr) {
                                System.out.print(n);
                            }
                            System.out.println();
                        }
                    }
                    System.out.println(String.format("第%d次交换,遍历了%d次", i + 1, j));
                }
            }
        }
    
        public static void main(String[] args) {
            Integer[] arr = new Integer[]{1, 3, 8, 7, 6, 9, 5, 4, 3, 2, 0};
            BubbleSort bs = new BubbleSort();
            bs.sort(arr);
        }
    
        /**
         * 13786954320 => 原数组,11个元素
         *    ^^       => 8比6大,交换
         * 13768954320
         *      ^^     => 9比5大,交换
         * 13768594320
         *       ^^    => 9比4大,交换
         * 13768549320
         *        ^^   => 9比3大,交换
         * 13768543920
         *         ^^  => 9比2大,交换
         * 13768543290
         *          ^^ => 9比0大,交换,后同
         * 13768543209
         * 第1次交换,遍历了10次
         * 13678543209
         * 13675843209
         * 13675483209
         * 13675438209
         * 13675432809
         * 13675432089
         * 第2次交换,遍历了9次
         * 13657432089
         * 13654732089
         * 13654372089
         * 13654327089
         * 13654320789
         * 第3次交换,遍历了8次
         * 13564320789
         * 13546320789
         * 13543620789
         * 13543260789
         * 13543206789
         * 第4次交换,遍历了7次
         * 13453206789
         * 13435206789
         * 13432506789
         * 13432056789
         * 第5次交换,遍历了6次
         * 13342056789 => 3从后方移动过来,原顺序未改变,因此稳定
         * 13324056789
         * 13320456789
         * 第6次交换,遍历了5次
         * 13230456789
         * 13203456789
         * 第7次交换,遍历了4次
         * 12303456789
         * 12033456789
         * 第8次交换,遍历了3次
         * 10233456789
         * 第9次交换,遍历了2次
         * 01233456789
         * 第10次交换,遍历了1次
         * 第11次交换,遍历了0次
         *
         * 最外层遍历了11次,最内层遍历了10 + 9 + ... + 1
         * => 遍历次数:n(n - 1)/2
         * => 时间复杂度:O(n2)
         * => 稳定性:稳定
         */
    
    }
  • 相关阅读:
    PAT (Advanced Level) 1010. Radix (25)
    PAT (Advanced Level) 1009. Product of Polynomials (25)
    PAT (Advanced Level) 1008. Elevator (20)
    PAT (Advanced Level) 1007. Maximum Subsequence Sum (25)
    PAT (Advanced Level) 1006. Sign In and Sign Out (25)
    PAT (Advanced Level) 1005. Spell It Right (20)
    PAT (Advanced Level) 1004. Counting Leaves (30)
    PAT (Advanced Level) 1001. A+B Format (20)
    PAT (Advanced Level) 1002. A+B for Polynomials (25)
    PAT (Advanced Level) 1003. Emergency (25)
  • 原文地址:https://www.cnblogs.com/SamNicole1809/p/12793713.html
Copyright © 2011-2022 走看看