作为一个入门级的排序方法
算法流程:
1、双重循环遍历序列
2、通过两两比较交换内层循环的两个相邻的值直到得到一个排序序列
代码
function BubbleSort(nums){for (let i = 0; i < nums.length - 1; i++) {for (let j = 0; j < nums.length - 1; j++) {if(nums[j] > nums[j + 1]){swap(nums, j, j + 1)}}}return nums}function swap(nums, i, j){let tmp = nums[i]nums[i] = nums[j]nums[j] = tmp}
时间复杂度(O(n^2))
空间复杂度(O(1))
上面是实现算法实际上可以进行改进,我们对冒泡排序进行改良
1、记录一个标记位用来标记是否发生了交换,如果没有交换说明已经排序好了
2、记录一个标记位用来每次排序最后一次发生交换位置,每次遍历不用全部遍历完
代码
**
function BubbleSort(nums){let lastChange = nums.length - 1for (let i = 0; i < nums.length - 1; i++) {let isSort = true, end = lastChangefor (let j = 0; j < end; j++) {if(nums[j] > nums[j + 1]){isSort = false // 存在交换没有排序好lastChange = j // 记录最后交换位置 最后一次交换以后,说明后面的已经不需要交换了swap(nums, j, j + 1)}}if(isSort) break // 如果不有任何交换说明已经排序好了}return nums}
时间复杂度(O(n) - O(n^2)) 平均(O(n^2))
空间复杂度(O(1))
**
最好的情况:已经是一个排序序列了
最换的情况:逆序序列
