算法排序篇-5【快速排序】js解法

40 阅读1分钟

快速排序

基本思想

快速排序和归并排序一样,也使用了分而治之的方法,将原始数组分为较小的数组。但是实现方式与归并排序并不一样。

基本思路

  1. 找基准值:找到数组中间的那个值做为基准值。
  2. 划分:循环数组,比基准值小的存储在左数组,大的存储在由数组。
  3. 继续第一步和第二步,排序完成合并左数组,基准值和右数组。

代码实现

let arr = [3,1,5,2,4,6,8]
var quickSort = function (arr) {
  if (arr.length <= 1) {
    return arr;
  }
  let pivotIndex = Math.floor(arr.length / 2); // 找到基准值索引
  let pivot = arr.splice(pivotIndex, 1)[0]; // 找到基准值并从原数组中移除
  let left = []; // 存储比基准值小的值
  let right = []; // 存储比基准值大的值
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] < pivot) {
      left.push(arr[i]); 
    } else {
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat([pivot], quickSort(right)); // 合并左数组,主元和右数组
};
console.log(quickSort(arr));

性能

快速排序的复杂度为O(nlog(n)),且性能通常比其他复杂度为O(nlog(n))的排序算法要好。