活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。
CSDN—21天学习挑战赛—【经典算法】
学习专栏地址
文章
冒泡排序
- 依次比较相邻的元素,顺序错误就调换位置(根据升降序来判断顺序),
- 一共遍历元素个数 - 1 次,每次遍历可减少一位元素的遍历
算法步骤(升序为例)
比较相邻的元素。如果第一个比第二个大,就交换他们两个。降序则相反,若第一个比第二个小,就调换位置
对每一对相邻元素作同样的工作,从开始到结尾。做完本次对比后,最后的元素会是最大的数。
然后又针对所有元素重复以上的步骤,除了最后一个(因为此时最后一个一定是最大数)。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
示意图
实例步骤示意
以arr=[6,1,5,2,4,3]
为例子
第一次 :(对比⑤次)
- 依次对比
[1,6,5,2,4,3]
6比1大,调换
[1,5,6,2,4,3]
6比5大,调换
[1,5,2,6,4,3]
6比2大,调换
[1,5,2,4,6,3]
6比4大,调换
[1,5,2,4,3,6]
6比3大,调换
第二次 :(对比④次)
- 本次 无需遍历最后一个数 6 了
[1,5,2,4,3,6]
1比5小,不调换
[1,2,5,4,3,6]
5比2大,调换
[1,2,4,5,3,6]
5比4大,调换
[1,2,4,3,5,6]
5比3大,调换
第三次 :(对比③次)
- 本次 无需遍历最后一个数 6 了,和倒数第二个数了
[1,2,4,3,5,6]
1比2小,不调换
[1,2,4,3,5,6]
2比4大,不调换
[1,2,3,4,5,6]
4比3大,调换
(虽然 前三位已经是升序了,但依然要对比,因为木有被检验过)
第四次 :(对比②次)
同理
第五次 :(对比①次)
同理
JS代码实现
- 升序为例·
let arr=[6,1,5,2,4,3]
function bubbleSort(_arr){
//代表循环遍历次数
for(let i=0;i<_arr.length-1;i++){
//代表每次循环 对比的次数
for(let j=0;j<_arr.length-1-i;j++){
//将当前值 存起来
let temp = _arr[j]
//若 前一个数 小于 后一个数 则调换位置
if(_arr[j] > _arr[j+1]){
_arr[j] = _arr[j+1]
_arr[j+1] = temp
}
}
}
return _arr
}
console.log(bubbleSort(arr))