在前端工作中算法不常用,但是排序可能会经常会用,下面学习几种常用算法。
引用借鉴:js的五种排序方法_js排序_木可生森的博客-CSDN博客
JS 常见的排序算法_js排序算法_东风过境F的博客-CSDN博客
1.冒泡排序:
思路:逐次判断两个相邻元素,大于则交换位置
步骤:从数组中第一个数开始,依次与下一个数比较并次交换比自己小的数,直到最后一个数,执行n-1轮,直到排序结束
图例展示
代码展示
function bubbleSort(arr) {
//外层控制轮数,每一次找到一个最大值
for (var i = 0; i < arr.length; i++) {
// 内层循环,控制比较的次数,并且判断两个数的大小
for (var j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
var temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}
return arr
}
let arr = [44,3,38,5,47,15,36,26,27,2,46,4,19,50,48];
let newArr = bubbleSort(arr);
2.选择排序
思路:从所有记录中选出最小的一个数据元素与第一个位置的记录交换;然后在剩下的记录当中再找最小的与第二个位置的记录交换,循环到只剩下最后一个数据元素为止。
图例展示
代码展示
function selectSort(arr) {
var minIndex
var temp
var len = arr.length
for (var i = 0; i < len; i++) {
minIndex = i
for (var j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j
}
}
temp = arr[i]
arr[i] = arr[minIndex]
arr[minIndex] = temp
}
return arr
}
let arr = [44,3,38,5,47,15,36,26,27,2,46,4,19,50,48];
let newArr = selectSort(arr);
3.快速排序
思路:取一个基准值,比基准值小的在左边,大的在右边;左右在继续这样的操作,最后合并。
图例展示
代码展示
function quickSort(arr) {
if (arr.length <= 1) {
return arr
}
var quickIndex = Math.floor(arr.length / 2)
var mid = arr.splice(quickIndex, 1)[0]
var left = []
var right = []
for (var i = 0; i < arr.length; i++) {
if (arr[i] > mid) {
left.push(arr[i])
} else {
right.push(arr[i])
}
}
return quickSort(right).concat([mid], quick_sort(left))
}
let arr = [44,3,38,5,47,15,36,26,27,2,46,4,19,50,48];
let newArr = quickSort(arr);
4. 插入排序
思路:从待排序的n个记录中的第二个记录开始,依次与前面的记录比较并寻找插入的位置,每次外循环结束后,将当前的数插入到合适的位置。
代码展示
function insertionSort(arr) {
for (var i = 1; i < arr.length; i++) {
var key = arr[i];
var j = i - 1;
while (arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
return arr;
}
let arr = [44,3,38,5,47,15,36,26,27,2,46,4,19,50,48];
let newArr = insertionSort(arr);