let arr = [12, 14, 145, 167, 32, 1, 90, 78];
1、sort 排序
//升序 arr.sort((a,b) => {return a - b;}) //降序 arr.sort((a,b) => {return b - a;})
2、冒泡排序
实现思路:
1. ⽐较相邻的元素。如果第⼀个⽐第⼆个⼤,就交换他们两个。
2. 对每⼀对相邻元素作同样的⼯作,从开始第⼀对到结尾的最后⼀对。这步做完后,最后的元素会是最⼤的数。
3. 针对所有的元素重复以上的步骤,除了最后⼀个。
4. 持续每次对越来越少的元素重复上⾯的步骤,直到没有任何⼀对数字需要⽐较。
function morkArr(arr){
if(!arr.length) return
var newArr;
for(let i = 0; i < arr.length;i++){
for(let j = 0; j < arr.length - 1; j++){
if(arr[j] > arr[j + 1]){
newArr = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = newArr;
}
}
}
return arr;
}
//优化版
function morkArr1(arr){
if(!arr.length) return
var newArr;
for(let i = 0; i < arr.length;i++){
let flag = false;
for(let j = 0; j < arr.length - 1; j++){
if(arr[j] > arr[j + 1]){
newArr = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = newArr;
flag = true;
}
}
//如果没有交换过元素,则已经有序
if(!flag) continue
}
return arr;
}
3、快排
实现思路:
以数组中间位置为基础,循环比对,比中间小放左侧,如果比中间值大,则放到右侧数组中
此时第一轮后将数组分为 左侧 + 中间 + 右侧
分别对左侧数组执行以上两步操作,直到拆不出数组位置
最后拼接数组
function quickSort(arr) {
if (arr.length <= 1) {
return arr;
}
let centerIndex = Math.floor(arr.length / 2),
centerVal = arr.splice(centerIndex, 1)[0];
let leftArr = [],
rightArr = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] <= centerVal) {
leftArr.push(arr[i]);
} else {
rightArr.push(arr[i]);
}
}
return quickSort(leftArr).concat(centerVal, quickSort(rightArr));
}
4、插入排序
实现思路:
首先从第一元素后面与前面对比,如果后面小于前面元素,该元素往前插入,依次类推,
已排序最后一个与后面元素对比,依次插入
function insertSort(arr){
for(let i = 0; i < arr.length; i++){
let key = arr[i];
let j = i - 1;
while(j >= 0 && arr[j] > key){
arr[j + 1] = arr[j];
j --
}
arr[j + 1] = key
}
return arr
}