活动地址:CSDN21天学习挑战赛
冒泡排序思想
冒泡排序从第一个数据开始与后面一个数据比较如果前面的数据比后面的数据大两个数交换,如果前面的数据比后面的数据小,不交换。简而言之,就是小的排在前面,大的排在后面(降序排序相反)。直到最后一个元素。
冒泡排序过程
第一次:从第一个数据开始,和后面的数据比较,比较到最后没有比它更大的就自己放在最后面
第二次:从第一个数据开始,和后面的数据比较,比较到最后比5小就放在5前面
第三次:从第一个数据开始,和后面的数据比较,比较到最后比4小就放在4的前面
第四次:从第一个数据开始,和后面的数据比较,比较到最后比3小就放在3的前面,由于已经是第一个了所以没有画出来。
冒泡排序代码
function bubbleSort(arr){
// round控制循环的次数,由于每次只能找一个最大的数放到最后,需要循环arr.length次,又因为当length-1个数据排完后剩下的就是按照顺序的因此最终的次数为arr.length-1次
for(let round = 0, len = arr.length - 1; round < len;round++){
// 每次把最大的数放到数组的最后
for(let inner = 0,len=arr.length; inner < len ; inner++){
if(arr[inner] > arr[inner+1]) {
let temp = arr[inner];
arr[inner] = arr[inner+1];
arr[inner+1] = arr[inner];
}
}
}
return arr;
}
复杂度分析
时间复杂度分析
外层循环执行n+1次
内层循环执行n(n+1)次
内存循环内的代码执行n²次
因此冒泡排序的时间复杂度为O(n²)
空间复杂度分析
冒泡排序使用变量标记循环次数额外空间是常数级的,因此,冒泡排序的空间复杂度是O(1)