js来实现常见的几种排序方案

405 阅读1分钟

排序是开发过程中经常遇到的场景,经常需要对后台返回的字段等进行排序。一般业务中我们会用数组的sort方法来实现排序,非常方便,在此不做赘述,本文主要讲逻辑上排序内部的实现方案。

冒泡排序

/**
 * Bubble Sort
 */
function bubbleSort(arr){
  for(let i=0; i<arr.length-1; i++){
    for(let j=0; j < arr.length -1 -i; j++){
      if(arr[j] > arr[j + 1]){
        const temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }

    }
  }
  return arr;
}

//验证
const arr = [1,26,7,89,0,889,54]
console.log('排序前', arr.join(','));

const newArr = bubbleSort(arr);
console.log('排序后的数组为:', newArr.join(','));

验证效果:

插入排序

/**
 * 插入排序
 */
function insertSort(arr){
  if(arr.length <= 1){
    return arr;
  }

  const newArray = [];
  newArray.push(arr[0]);

  for(let i = 1; i < arr.length; i++){
    
    for(let j = 0; j < newArray.length; j++){
      if(newArray[j] > arr[i]){
        if(j === 0){
          newArray.unshift(arr[i]);
        }else{
          newArray.splice(j,0,arr[i]);
        }
        break;
      }
      if(j === newArray.length -1){
        newArray.push(arr[i]);
        break;
      }
    }

  }
  return newArray;
}

//验证
const array = [1,26,7,89,0,889,54]
console.log('排序前', array);
console.log('排序后', insertSort(array));

效果验证:

快速排序

function quickSort(arr){
  if(arr.length <= 1){
    return arr;
  }

  const flagIndex =  Math.floor(arr.length/2);
  const flagValue = arr[flagIndex];

  arr.splice(flagIndex, 1);

  const leftArr = [];
  const rightArr = [];

  for(let i = 0; i<arr.length; i++ ){
    if(flagValue>arr[i]){
      leftArr.push(arr[i]);
    }else{
      rightArr.push(arr[i]);
    }
  }

  return [...quickSort(leftArr), flagValue, ...quickSort(rightArr)]
}

//验证
const array = [1,26,7,89,0,889,54]
console.log('排序前', array.join(','));
console.log('排序后', quickSort(array).join(','));

效果验证

总结

本文基于js对常见的几种排序(冒泡排序,插入排序,快速排序 )方式进行了实现,希望能对你有所帮助。

如果本文对你有帮助,欢迎给作者点赞加关注哈哈~