排序算法: 冒泡排序

174 阅读2分钟

一.冒泡排序简介

冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来,核心部分是双重嵌套循环。
冒泡排序的时间复杂度是O(N2)。这是一个非常高的时间复杂度。

二.代码栗子

  • 代码

    fun main() {
        val nums = intArrayOf(1, 4, 5, 6, 8, 2, 9, 3, 7)
        
        println("\n---------------------------倒序-----------------------------\n")
        // 每次结束一轮循环即可确定一个元素的位置
        for (i in nums.indices) {
            /**
             * 每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来
             * 比较俩相邻的元素,确保数组不越界 nums.length - 1
             * 外层循环,每结束一次即可确认一个元素的位置. 所以 nums.length - i , 无需在比较已经确认的元素
             */
            for (j in 0 until nums.size - 1 - i) {
                if (nums[j] < nums[j + 1]) {
                    val temp = nums[j]
                    nums[j] = nums[j + 1]
                    nums[j + 1] = temp
                }
            }
            println("第 $i 次:  ${nums.contentToString()}")
        }
        println("倒序:     ${nums.contentToString()}")
        
        println("\n---------------------------正序-----------------------------\n")
        for (i in nums.indices) {
            for (j in 0 until nums.size - 1 - i) {
                if (nums[j] > nums[j + 1]) {
                    val temp = nums[j]
                    nums[j] = nums[j + 1]
                    nums[j + 1] = temp
                }
            }
            println("第 $i 次:  ${nums.contentToString()}")
        }
        println("正序:     ${nums.contentToString()}")
    }
    
  • 执行结果

    ---------------------------倒序-----------------------------
    
    第 0 次:  [4, 5, 6, 8, 2, 9, 3, 7, 1]
    第 1 次:  [5, 6, 8, 4, 9, 3, 7, 2, 1]
    第 2 次:  [6, 8, 5, 9, 4, 7, 3, 2, 1]
    第 3 次:  [8, 6, 9, 5, 7, 4, 3, 2, 1]
    第 4 次:  [8, 9, 6, 7, 5, 4, 3, 2, 1]
    第 5 次:  [9, 8, 7, 6, 5, 4, 3, 2, 1]
    第 6 次:  [9, 8, 7, 6, 5, 4, 3, 2, 1]
    第 7 次:  [9, 8, 7, 6, 5, 4, 3, 2, 1]
    第 8 次:  [9, 8, 7, 6, 5, 4, 3, 2, 1]
    倒序:     [9, 8, 7, 6, 5, 4, 3, 2, 1]
    
    ---------------------------正序-----------------------------
    
    第 0 次:  [8, 7, 6, 5, 4, 3, 2, 1, 9]
    第 1 次:  [7, 6, 5, 4, 3, 2, 1, 8, 9]
    第 2 次:  [6, 5, 4, 3, 2, 1, 7, 8, 9]
    第 3 次:  [5, 4, 3, 2, 1, 6, 7, 8, 9]
    第 4 次:  [4, 3, 2, 1, 5, 6, 7, 8, 9]
    第 5 次:  [3, 2, 1, 4, 5, 6, 7, 8, 9]
    第 6 次:  [2, 1, 3, 4, 5, 6, 7, 8, 9]
    第 7 次:  [1, 2, 3, 4, 5, 6, 7, 8, 9]
    第 8 次:  [1, 2, 3, 4, 5, 6, 7, 8, 9]
    正序:     [1, 2, 3, 4, 5, 6, 7, 8, 9]
    

三.相关资料

  • 冒泡排序-菜鸟教程