一.冒泡排序简介
冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来,核心部分是双重嵌套循环。
冒泡排序的时间复杂度是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]
三.相关资料
- 冒泡排序-菜鸟教程