我是靠谱客的博主 忧虑饼干,这篇文章主要介绍JavaScript 数据结构与算法十大经典排序算法-冒泡排序(一),现在分享给大家,希望可以做个参考。

实现原理

简单来说就是实现的思想

  • 冒泡排序只会操作相邻的两个数据
  • 每次冒泡操作都会对相邻两个元素进行比较,看是否满足大小关系要求。如果不满足就让他俩互换
  • 一次冒泡会让至少一个元素移动到它应该再度位置,重复 n 次,就完成了 n 个数据的排序工作

特点

  • 优点:排序算法的基础,简单使用易于理解
  • 缺点:比较次数多,效率较低

实现

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//冒泡排序(未优化) const buddleSort = arr=>{ let length = arr.length if ( length <=1 ) return // i < length - 1 是因为外层只需要 length-1 次就排好了,第 length 次比较是多余的。 for ( let i=0; i<length-1; i++ ){ // j < length - i - 1 是因为内层的 length-i-1 到 length-1 的位置已经排好了,不需要再比较一次。 for (let j=0; j<length-i-1; j++){ if (arr[j] > arr[j+1] ){ const temp = arr[j] arr[j] = arr[j+1] arr[j+1] = temp } } } }

突然发现自己好菜,这个代码乍一看没看懂。
上面代码实现方法是这样的(懂得直接跳过这段),数组两两对比会把大的那个往后排,这样第一次循环之后,数组中最大的会排到最后。所以内层循环for (let j=0; j<length-i-1; j++){ },在下一次循环时就可以少循环一次,以此类推,外层循环一次内层循环就少一个。这样每次外层循环对应内场循环就是length-i-1次。

优化:当某次冒泡操作已经没有数据交换时,说明已经到达完全有序,也就是已经排序完成,不用再继续执行后续的冒泡操作。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 冒泡排序(已优化) buddleSort = arr=>{ let length = arr.length if ( length <=1 ) return // i < length - 1 是因为外层只需要 length-1 次就排好了,第 length 次比较是多余的。 for ( let i=0; i<length-1; i++ ){ let hasChange = false //标志代表是否某次排序数据没有交换,也就是代表排序已完成 // j < length - i - 1 是因为内层的 length-i-1 到 length-1 的位置已经排好了,不需要再比较一次。 for (let j=0; j<length-i-1; j++){ if (arr[j] > arr[j+1] ){ const temp = arr[j] arr[j] = arr[j+1] arr[j+1] = temp hasChange = true //这个时候是有数据交换的 } } if(!hasChange) break // 如果false 说明内层循环在某次数据对比时没有进行数据交换过,这个时候就可以提前退出循环,排序已经完成 } }

以上就是冒泡排序的实现方法。

最后

以上就是忧虑饼干最近收集整理的关于JavaScript 数据结构与算法十大经典排序算法-冒泡排序(一)的全部内容,更多相关JavaScript内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部