分享javascript实现的冒泡排序代码并优化
以下是我汇总的几份我个人珍藏的JavaScript实现的冒泡排序代码,每一份都是经过深思熟虑的结晶,希望能为需要的小伙伴们提供一些参考和启示。
一、基础版冒泡排序
这是最基础的冒泡排序实现方式,容易理解,适用于入门级的编程爱好者。
```javascript
function bubbleSort(arr) {
let len = arr.length;
for (let i = 0; i < len - 1; i++) {
for (let j = 0; j < len - 1 - i; j++) {
if (arr[j] > arr[j + 1]) { //相邻元素两两对比
let temp = arr[j + 1]; //元素交换
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
```
二、优化版冒泡排序(只遍历未排序部分)
这个版本的冒泡排序在每次遍历中只处理未排序的部分,提高了效率。
```javascript
function bubbleSortImproved(arr) {
let len = arr.length;
初始数组是:[9,8,7,6,5,4,3,2,1]。我们的目标是将其排序。
第一轮比较:我们比较中间的数字(这里的中间数字是4),然后将它与数组的起始数字交换位置(变为新的起始数字)。经过这次交换后,我们得到了新的数组:[8,7,6,5,4,3,2,1,9]。我们称之为第一轮交换。这个过程重复进行,每次交换都基于当前的排序状态进行。每一轮交换后,数组的排序都会更加有序。在理想情况下,我们可以不进行任何交换就直接得到排序好的数组,最坏的情况是进行八次交换。接下来我们看看这个冒泡排序算法的详细实现。
让我们看看第一种算法。假设我们有一个整数数组,其中包含各种数字,它们的顺序杂乱无章。为了将这个数组排序,我们可以使用冒泡排序法。
代码如下:
```javascript
var list = [23, 45, 18, 37, 92, 13, 24]; // 待排序的数组
var n = list.length; // 获取数组的长度
var tmp; // 用于交换顺序的临时变量
var exchange; // 交换标志
// 通过两层循环实现冒泡排序
for (var time = 0; time < n - 1; time++) { // 外层循环控制排序趟数
exchange = false; // 设置交换标志为false,表示当前趟排序没有发生交换
for (var i = n - 1; i > time; i--) { // 内层循环控制每一趟的排序过程
if (list[i] < list[i - 1]) { // 如果当前元素小于前一个元素,则交换它们的位置
exchange = true; // 设置交换标志为true
tmp = list[i - 1]; // 记录前一个元素的值
list[i - 1] = list[i]; // 将当前元素的值赋给前一个元素的位置
list[i] = tmp; // 将记录的值放到当前元素的位置,完成交换
}
}
// 若本趟排序未发生交换,说明数组已经有序,提前终止算法
if (!exchange) {
break;
}
}
alert('数组排序后为' + list + ',共排了' + time + '趟'); // 输出排序后的数组和排序趟数
```
接下来是另一种冒泡排序算法的:
代码如下:
```javascript
function BubbleSort(array) { // 定义冒泡排序函数,接收一个数组作为参数
var length = array.length; // 获取数组的长度
var temp; // 用于交换的临时变量
var isSort = false; // 记录是否发生交换的标志位
for (var i = 1; i < length; i++) { // 外层循环控制排序趟数,从第二个元素开始比较
isSort = false; // 重置交换标志位为false,表示当前趟未发生交换操作
for (var j = 0; j < length - i; j++) { // 内层循环控制每一趟的排序过程,从第一个元素开始比较到倒数第二个元素结束(因为最后一个元素已经有序)
编程语言
- 分享javascript实现的冒泡排序代码并优化
- nodejs和C语言插入mysql数据库乱码问题的解决方法
- php结合redis高并发下发帖、发微博的实现方法
- 深入理解Vue router的部分高级用法
- sql server 2000管理单元初始化失败的解决方法
- 用 js 的 selection range 操作选择区域内容和图片
- php中yar框架实例用法讲解
- JS全局变量和局部变量最新解析
- angularjs实现搜索的关键字在正文中高亮出来
- 数据库更新Sqlserver脚本总结
- Laravel框架Auth用户认证操作实例分析
- 轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
- ASP.NET中Web API的简单实例
- 一道优雅面试题分析js中fn()和return fn()的区别
- PHP字符串中抽取子串操作实例分析
- JS鼠标滚动分页效果示例