分享javascript实现的冒泡排序代码并优化

网络编程 2025-03-29 03:49www.168986.cn编程入门

以下是我汇总的几份我个人珍藏的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++) { // 内层循环控制每一趟的排序过程,从第一个元素开始比较到倒数第二个元素结束(因为最后一个元素已经有序)

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by