JavaScript实现经典排序算法:冒泡排序与选择排序
187 浏览量
更新于2024-08-31
收藏 38KB PDF 举报
"本文介绍了几种经典排序算法的JavaScript实现,包括冒泡排序和选择排序,提供了详细的代码示例。"
在计算机科学中,排序算法是用于对数据序列进行重新排列,使其按照特定顺序(如升序或降序)排列的算法。在JS中,我们可以实现这些经典的排序算法来处理数组数据。以下是两种常见的排序算法的JS实现:
**1. 冒泡排序(Bubble Sort)**
冒泡排序是一种简单的排序算法,通过重复遍历数组并比较相邻元素,将较大的元素逐步“冒”到数组的末尾。其基本步骤如下:
- 遍历数组的每一个元素,从第一个到最后一个。
- 对每一对相邻元素做同样的工作,比较它们的大小,如果顺序错误就交换它们。
- 这个过程会持续到数组的最后,最后一个元素会被正确地放在数组的末尾。
- 重复以上步骤,但每次减少最后一个已排序元素的位置,直到整个数组有序。
以下是冒泡排序的JavaScript实现:
```javascript
function BubbleSort(array) {
var length = array.length;
for (var i = length - 1; i > 0; i--) { // 用于缩小范围
for (var j = 0; j < i; j++) { // 在范围内进行冒泡,在此范围内最大的一个将冒到最后面
if (array[j] > array[j + 1]) {
var temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
console.log(array); // 打印中间过程
console.log("-----------------------------");
}
return array;
}
var arr = [10, 9, 8, 7, 7, 6, 5, 11, 3];
var result = BubbleSort(arr);
console.log(result);
```
**2. 选择排序(Selection Sort)**
选择排序的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
- 从待排序的数组中找到最小元素,并将其与第一个元素交换位置。
- 继续在剩余元素中寻找最小元素,与第二个元素交换。
- 重复以上步骤,直到所有元素排序完毕。
以下是选择排序的JavaScript实现:
```javascript
function SelectionSort(array) {
var length = array.length;
for (var i = 0; i < length; i++) { // 缩小选择的范围
var min = array[i]; // 假定范围内第一个为最小值
var index = i; // 记录最小值的下标
for (var j = i + 1; j < length; j++) { // 查找范围内的最小元素
if (array[j] < min) {
min = array[j];
index = j;
}
}
// 将找到的最小元素与当前位置的元素交换
if (index !== i) {
var temp = array[i];
array[i] = array[index];
array[index] = temp;
}
}
return array;
}
var arr = [10, 9, 8, 7, 7, 6, 5, 11, 3];
var result = SelectionSort(arr);
console.log(result);
```
这两种排序算法各有特点:冒泡排序的时间复杂度在最坏情况下是O(n²),但对部分已经排序的数组有较好的效率;选择排序的时间复杂度始终保持在O(n²),但它可以在任何位置找到最小/最大元素,因此在某些情况下可能更快。在实际应用中,通常会使用更高效的排序算法,如快速排序、归并排序等。
2010-12-26 上传
2020-12-12 上传
2020-10-20 上传
2021-01-19 上传
2009-04-26 上传
2020-10-17 上传
2020-10-18 上传
weixin_38592405
- 粉丝: 6
- 资源: 868
最新资源
- 新代数控API接口实现CNC数据采集技术解析
- Java版Window任务管理器的设计与实现
- 响应式网页模板及前端源码合集:HTML、CSS、JS与H5
- 可爱贪吃蛇动画特效的Canvas实现教程
- 微信小程序婚礼邀请函教程
- SOCR UCLA WebGis修改:整合世界银行数据
- BUPT计网课程设计:实现具有中继转发功能的DNS服务器
- C# Winform记事本工具开发教程与功能介绍
- 移动端自适应H5网页模板与前端源码包
- Logadm日志管理工具:创建与删除日志条目的详细指南
- 双日记微信小程序开源项目-百度地图集成
- ThreeJS天空盒素材集锦 35+ 优质效果
- 百度地图Java源码深度解析:GoogleDapper中文翻译与应用
- Linux系统调查工具:BashScripts脚本集合
- Kubernetes v1.20 完整二进制安装指南与脚本
- 百度地图开发java源码-KSYMediaPlayerKit_Android库更新与使用说明