使用js将两个数组合并且排序的几种方法

409 阅读1分钟
1.使用双for循环
 var a [1,3,5]
 var b = [2,4,6,7]
 var c = a.concat(b)
 var temp
 for(let i =0;i<c.length;i++){
     for(let j =0;j<c.length-1;j++){
         if(c[j]>c[j+1]){
             temp = c[j]
             c[j]=c[j+1]
             c[j+1] = temp
         }
     }
 }
 console.log(c)
 
 2.直接使用sort方法
 var a = [1,3,5]
 var b = [2,4,6,7]
 var c = a.concat(b)
 c.sort((i,j) => {
     return i-j
 })
 console.log(c)
 
 3.使用递归实现快速排序
 var a = [1,3,5]
 var b = [2,4,6,7]
 var c = a.concat(b)
 function sortArr(arr){
     if(arr.length<2){
         return arr
     }
     var centerIndex = Math.floor(arr.length/2)
     var centerNum = arr.splice(centerIndex,1)
     var left = []
     var right = []
     for(let i = 0;i<arr.length;i++){
         if(arr[i]<centerNum){
             left.push(arr[i])
         }else{
             right.push(arr[i])
         }
     }
    return sortArr(left).concat(centerNum,sortArr(right)) 
 }
 console.log(sortArr(c))
 
 4.有一点限制的一个方法
 let sortArr = (arr1, arr2) => {
    let i = 0,
      j = 0
    let newArr = []
    while (i < arr1.length && j < arr2.length) {
      if (arr1[i] < arr2[j]) {
        newArr.includes(arr1[i]) ? '' : newArr.push(arr1[i])
        i++
      } else if (arr1[i] > arr2[j]) {
        newArr.includes(arr2[j]) ? '' : newArr.push(arr2[j])
        j++
      } else if (arr1[i] === arr2[j]) {
        newArr.includes(arr1[i]) ? '' : newArr.push(arr1[i])
        i++, j++
      }
    }
    // 将指针未移到末尾的部分取出,拼到新数组后面
    if (i < arr1.length) {
      return newArr.concat(arr1.splice(i))
    } else if (j < arr2.length) {
      return newArr.concat(arr2.splice(j))
    } else {
      return newArr
    }
  }

  console.log(sortArr([2, 5, 11], [4, 7, 9, 10]))
  该方法有限制在于提供两个数组参数,必须是排序好的数组,不然不生效。