js 常用排序

2021-04-05  本文已影响0人  从小就很丑_827d

常用排序方法(这里就不写空间复杂度和时间复杂度了。就是用的时间和占的内存)
1.冒泡排序

function bubbleSort(arr){
  let temp
  for(let i=0;i<arr.length-1;i++){
      let flag = false
    for (let j = 0; j < arr.length-1; j++) { //length-1 是因为每次最大的值位置就固定了
      if(arr[j]>arr[j+1]){
        temp= arr[j]
        arr[j]=arr[j+1]
        arr[j+1] =temp
        flag = true
      }
    }
    if(!flag){  //当flag 为false 代表内循环已经比完 最后一次外循环就没比较  直接return
      return arr
    }
  }
}

2.快速排序

function quickSort(array){ 
    if(array.length<=1) return array;
     let base_num =  array[0] //找一个基准数,你可以找第一个 也可以找中间的
     let left_arr = [] //左数组
     let right_arr = [] //右数组
     for(let i=1;i<array.length; i++){ //循环和基准数比较   小于base_num 的放left_arr 反则right_arr
       if(array[i]<base_num){
         left_arr.push(array[i])
       }else{
         right_arr.push(array[i])
       }
     }
     if(left_arr.length>1) left_arr = quickSort(left_arr); //这是递归
     if(right_arr.length>1) right_arr = quickSort(right_arr);
     return left_arr.concat(base_num,right_arr) //直到 左右数组都只有一个的时候 将其连接
}

3.归并排序

function merge(leftArr, rightArr){  
    var result = [];  
    while (leftArr.length > 0 && rightArr.length > 0){  
      if (leftArr[0] < rightArr[0])  
        result.push(leftArr.shift()); //把最小的最先取出,放到结果集中   
      else   
        result.push(rightArr.shift());  
    }   
    return result.concat(leftArr).concat(rightArr);  //剩下的就是合并,这样就排好序了  
}  
function mergeSort(array){  
    if (array.length == 1) return array;  
    var middle = Math.floor(array.length / 2);       //求出中点  
    var left = array.slice(0, middle);               //分割数组  
    var right = array.slice(middle);  
    // console.log(mergeSort(left))
    return merge(mergeSort(left), mergeSort(right)); //递归合并与排序  
}  

4.待续。。。

上一篇 下一篇

猜你喜欢

热点阅读