提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
排序算法是JavaScript开发中最常用的算法之一这里举例了4种其中快速排序是效率最高的。
提示:以下是本篇文章正文内容,下面案例可供参考
一、 冒泡排序
冒泡排序是最基础的排序方法
用冒泡排序,对输入的6个数进行排序
思路:输入6个无序的数字,从头到尾依次比较相邻两个数字大小,若大数在前、小数在后,则交换两数位置,依次比较,使全部数据按从小到大排列
步骤
- 逐层冒泡 大悦城执行的冒泡执行比较的次数为对前的长度-1
- 冒泡的总次数为长度-1
- 和j+1比 比完位置交换
- 冒泡的比较次数一次比一次少 最后一次结束
例如: 将数组[8,9,7,6,5,4]进行升序排序[4,5,6,7,8,9]
代码
// 冒泡排序 逐次冒泡到上面去
var arr = [8,9,7,6,5,4];
function bubbleSort(array) {
// 冒泡的次数
for (var i = 1; i < array.length; i++) {
for (var j = 0; j < array.length - i; j++) {
//记录比较次数
// 比较
if (array[j] > array[j + 1]) {
//换位置
var temp = array[j]; //先保留j的位置
array[j] = array[j + 1]; //将j+1位置的值赋个j+1的位置
array[j + 1] = temp;
}
}
}
}
bubbleSort(arr);
console.log(arr.join(","));
二、选择排序
思路步骤
- 每次选择当前的第一个数为最小值
- 这个值跟后面的所有去比较 然后对应的比我这个值还小 把下标记录起来
- 将这个下标赋值给min
- 判断min是否是我前面给到的值 如果是不做操作 如果不是交换位置
代码
// 选择排序
var arr = [1, 3, 8, 5, 7, 6, 2];
function selectorSort(array) {
for (var i = 0; i < array.length - 1; i++) {
//设置第一个数为最小值
var min = i;
for (var j = i + 1; j < arr.length; j++) {
if (array[min] < array[j]) {
//如果比最小值还小
min = j; //使用min记录一下这个值
}
}
if (min != i) {
//min不指向我们开始指定的下标
var temp = array[i];
array[i] = array[min];
array[min] = temp;
}
}
}
selectorSort(arr);
console.log(arr);
三、插入排序
方法1
从前往后比
//插入排序(第一种)
var arr = [5, 9, 4, 3, 1, 8, 2, 6];
function insertion(array) {
for (var i = 1; i < array.length; i++) {
var preIndex = i - 1; //获取前一个下标
var current = array[i]; //先保存当前的值 为防止
while (preIndex >= 0 && current < array[preIndex]) {
//如果前一个下标等于0 和 当前的值为小于是一个
array[preIndex + 1] = array[preIndex]; //将本身这个位置的值赋值为是一个
preIndex--; //递减 继续往前走
}
array[preIndex + 1] = current; //当前的位置的值等于原本位置的值
}
}
insertion(arr);
console.log(arr);
方法2
从后往前比
//插入排序
//从后往前比 初始下标为1
var arr = [5, 9, 4, 3, 1, 8, 2, 6];
function inserSort(array) {
for (var i = 1; i < array.length; i++) {
for (var j = i; j > 0; j--) {
if (array[j - 1] > array[j]) {
var temp = array[j - 1];
array[j - 1] = array[j];
array[j] = temp;
}
}
}
}
inserSort(arr);
console.log(arr);
四、快速排序
开始排序是效率最高的推荐使用
快速排序是核心就是二分法
// 快速排序
var arr = [1, 3, 8, 5, 6, 2]; //length7 中间值为4
function quickSort(arr) {
if (arr.length <= 1) {//长度为1或者小于1退出
return arr;
}
var centerIndex = Math.round(arr.length / 2);//取中间值下标
var center = arr.splice(centerIndex, 1)[0];//接收删除的中间值
var left = [];//左边的数组
var right = []; //右边的数组
for (var i = 0; i < arr.length; i++) {//循环遍历
if (arr[i] < center) {//小于中间值 加到左边
left.push(arr[i]);
} else {
right.push(arr[i]);//大于中间值 加到左边
}
}
return quickSort(left).concat([center], quickSort(right));//返回合并的数组
}
console.log(quickSort(arr));
总结
以上就是今天要讲的内容,本文仅仅简单介绍了几种排序的基础使用, 排序算法能使我们快速便捷地处理数组的排序。