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 )

相关内容

热门资讯

复刻贵州馆子味!家常泡椒炒牛肉... 贵州泡椒炒牛肉是一道充满地方特色的家常菜,它以鲜嫩的牛肉和酸辣开胃的泡椒为主要食材,成菜香气扑鼻,口...
黔寨风味“黄金派”:外酥内糯,... 在贵州连绵的群山与缭绕的云雾间,散落着许多古老村寨。这里不仅保留着深厚的民族传统,更隐藏着无数令人惊...
大妈教你东北芥菜疙瘩的腌制方法... 眼下正是腌菜的好时节,每年这个时候,我总会想起东北大娘腌的芥菜疙瘩,那味道堪称一绝。她的做法特别简单...
原创 一... 家人们谁懂啊!黑椒牛肉配杏鲍菇真的是神仙组合!软嫩多汁的牛肉裹着浓郁的黑椒酱汁,杏鲍菇吸饱了肉香变得...