排序算法对于前端来说用的不是那么多(sort除外...),但是一些比较常见的排序算法还是需要知道的,下面分享一下常见的算法代码实现
- 冒泡
let arr = [1,3,2,4,8,6,7,5];
function bubble(arr) {
let len = arr.length;
let temp;
for(let i=0;i<len;i++) {
for(let j=0;j<len-i-1;j++) {
// 相邻元素比较
if(arr[j]>arr[j+1]) {
// 满足条件交互
temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
return arr
}
console.log(bubble(arr));// [1,2,3,4,5,6,7,8]
- 选择
let arr = [1,3,2,4,8,6,7,5];
function select(arr) {
let len = arr.length;
let min,temp;
for(let i=0;i<len-1;i++) {
// 假设当前拿到的是最小值 min是索引
min = i;
for(let j=i+1;j<len;j++) {
// 找到最小值
if(temp>arr[j]) {
min = j;
}
}
// 当前值与最小值交换
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
return arr
}
console.log(select(arr));// [1,2,3,4,5,6,7,8]
- 插入
let arr = [1,3,2,4,8,6,7,5];
function insert(arr) {
let len = arr.length;
let pre,temp;
for(let i=1;i<len;i++) {
// pre是前一个的索引
pre = i-1;
temp = arr[i];
// 不断与前一个数比较,满足条件插入
while(pre>=0 && arr[pre]>temp) {
// 大值给小值赋值
arr[pre+1] = arr[pre];
pre--;
}
arr[pre+1] = temp;
}
return arr
}
console.log(insert(arr));// [1,2,3,4,5,6,7,8]
- 归并
let arr = [1,3,2,4,8,6,7,5];
function merge(arr) {
let len = arr.length;
if(len<=1) {
return arr
}
let mid,left=[],right=[];
mid = Math.floor(len/2);
left = arr.slice(0,mid);
right = arr.slice(mid);
return mergeFn(merge(left),merge(right))
}
function mergeFn(left,right) {
let result = [];
while (left.length && right.length) {
if (left[0] <= right[0]) {
result.push(left.shift());
} else {
result.push(right.shift());
}
}
while (left.length)
result.push(left.shift());
while (right.length)
result.push(right.shift());
return result;
}
console.log(merge(arr));// [1,2,3,4,5,6,7,8]
- 快速(比较好的一种)
let arr = [1,3,2,4,8,6,7,5];
function quick(arr) {
let len = arr.length;
if(len<=1) {
return arr
}
let midIndex = Math.floor(len/2);
let mid = arr.splice(midIndex,1);
let left=[],right=[];
for(let i=0;i<arr.length;i++) {
if(arr[i]>mid) {
right.push(arr[i]);
}else{
left.push(arr[i]);
}
}
return quick(left).concat(mid,quick(right))
}
console.log(quick(arr));// [1,2,3,4,5,6,7,8]