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
}