JavaScript实现冒泡排序
admin
2024-03-01 00:10:02

 

  • 先遍历数组,让挨着的两个进行比较,如果前一个比后一个大,那么就把两个换个位置

  • 数组遍历一遍以后,那么最后一个数字就是最大的那个了

  • 然后进行第二遍的遍历,还是按照之前的规则,第二大的数字就会跑到倒数第二的位置

  • 以此类推,最后就会按照顺序把数组排好了

我们先来准备一个乱序的数组

var arr = [3, 1, 5, 6, 4, 9, 7, 2, 8]

 

  • 接下来我们就会用代码让数组排序

 先不着急循环,先来看数组里面内容换个位置

// 假定我现在要让数组中的第 0 项和第 1 项换个位置
// 需要借助第三个变量
var tmp = arr[0]
arr[0] = arr[1]
arr[1] = tmp

 

 第一次遍历数组,把最大的放到最后面去

for (var i = 0; i < arr.length; i++) {// 判断,如果数组中的当前一个比后一个大,那么两个交换一下位置if (arr[i] > arr[i + 1]) {var tmp = arr[i]arr[i] = arr[i + 1]arr[i + 1] = tmp}
}// 遍历完毕以后,数组就会变成 [3, 1, 5, 6, 4, 7, 2, 8, 9]

 

  1. 第一次结束以后,数组中的最后一个,就会是最大的那个数字

  2. 然后我们把上面的这段代码执行多次。数组有多少项就执行多少次

 按照数组的长度来遍历多少次

 

for (var j = 0; j < arr.length; j++) {for (var i = 0; i < arr.length; i++) {// 判断,如果数组中的当前一个比后一个大,那么两个交换一下位置if (arr[i] > arr[i + 1]) {var tmp = arr[i]arr[i] = arr[i + 1]arr[i + 1] = tmp}}
}// 结束以后,数组就排序好了

 给一些优化

  • 想象一个问题,假设数组长度是 9,第八次排完以后

  • 后面八个数字已经按照顺序排列好了,剩下的那个最小的一定是在最前面

  • 那么第九次就已经没有意义了,因为最小的已经在最前面了,不会再有任何换位置出现了

for (var j = 0; j < arr.length - 1; j++) {for (var i = 0; i < arr.length; i++) {// 判断,如果数组中的当前一个比后一个大,那么两个交换一下位置if (arr[i] > arr[i + 1]) {var tmp = arr[i]arr[i] = arr[i + 1]arr[i + 1] = tmp}}
}

 

  • 第二个问题,第一次的时候,已经把最大的数字放在最后面了

  • 那么第二次的时候,其实倒数第二个和最后一个就不用比了

  • 因为我们就是要把倒数第二大的放在倒数第二的位置,即使比较了,也不会换位置

  • 第三次就要倒数第三个数字就不用再和后两个比较了

  • 以此类推,那么其实每次遍历的时候,就遍历 当前次数 - 1

    for (var j = 0; j < arr.length - 1; j++) {for (var i = 0; i < arr.length - 1 - j; i++) {// 判断,如果数组中的当前一个比后一个大,那么两个交换一下位置if (arr[i] > arr[i + 1]) {var tmp = arr[i]arr[i] = arr[i + 1]arr[i + 1] = tmp}}
    }

  • 至此,一个冒泡排序就完成了

上一篇:集合的总结

下一篇:Redis 列表( List )

相关内容

热门资讯

蛟河游船好去处,宴宾园活鱼馆美... 在蛟河游玩,游船是领略湖光山色的绝佳方式,而游玩之后,一顿美味的餐食更是不可或缺。宴宾园活鱼馆就是这...
必去的景点有免费WiFi、三级... 在旅游的世界里,寻找那些拥有独特魅力且设施完备的景点是每一位旅行者的心愿。今天,我们要为大家介绍一个...