【js】选择排序,冒泡排序,快速排序整理

131 阅读1分钟

金九银十,又到了跳槽季,赶紧复习下排序准备跳槽。下面整理了几种常见的排序算法。

选择排序

选择排序的原理是从数组中遍历出最小值,放进新数组中,然后再把原数组中的对应的值删除,最后得出一个从小到大的新数组

/**
   * @description: 
   * @param {number []} 
   * @return {number []} 
   */  
  //选择排序
   function selectSort(arr){
    let list=[...arr]   //拷贝一份,不要对原数组进行操作
    let newList=[]  //返回的数组
    while(list.length>0)
    {
      let min=list[0]  //设置初始最小值
      let minIndex      //设置最小值的索引
      list.forEach((el,index)=>{
        if(el<min)
        {
          min=el
          minIndex=index
        }
      })
      newList.push(min)
      list.splice(minIndex,1)
    }
    return newList
   }
   

冒泡排序

冒泡排序其实就是对比相邻的两个元素,把大的值放在后面,这样一轮遍历之后,数组最后一个元素就是最大的值了,这样依次类推,循环n-1次后排序就已经完成了。

/**
   * @description: 
   * @param {number []} 
   * @return {undefined} 
   */  

  function sort(arr)
  {
    let len=arr.length-1
    for(let i=0;i<len;i++)
    {
      for(let j=0;j<len-i;j++)
      {
        if(arr[j]>arr[j+1])
        {
          [arr[j],arr[j+1]]=[arr[j+1],arr[j]]
        }
      }
    }
  }

快速排序

快速排序是通过二分法来进行排序的,效率比较高,主要就是先选择一个基准值,比这个 基准值大的放在右边,小的放在左边,利用递归继续进行重复拆分,直到数组拆分的长度只有1了就是排序完成,结束递归.

/**
   * @description: 
   * @param {number []} 
   * @return {number []} 
   */  
   function quickSort(arr)
   {
     if(arr.length<2)
     {
       return arr
     }
     let mid=arr.splice(0,1)[0]
     let low=[]
     let high=[]
     let len=arr.length

     for(let i=0;i<len;i++)
     {
       if(arr[i]<=mid)
       {
         low.push(arr[i])
       }
       else{
        high.push(arr[i])
       }
     }
     console.log(low,mid,high)

     return quickSort(low).concat([mid]).concat(quickSort(high))
   }