• 算法系列之<冒泡排序>


    冒泡排序:

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

    复杂度分析:

    数据的初始序列已排序,只需要一趟扫描,比较次数为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;
                            }
                        }
                    }
    
                }
            }
        }
  • 相关阅读:
    linux socket里的send和recv,阻塞与非阻塞socket、TCP与UDP在这方面的区别
    leetcode 149 Max Points on a Line
    leetcode 126 Word Ladder II
    leetcode 123 Best Time to Buy and Sell Stock III
    LC 297 Serialize and Deserialize Binary Tree
    栈和队列问题
    链表问题
    day17--权限管理和配置服务
    谷粒学院功能简介及系统架构
    day01--MybatisPlus的使用
  • 原文地址:https://www.cnblogs.com/zhaijing/p/9775723.html
Copyright © 2020-2023  润新知