算法--快速排序

95 阅读1分钟
function quickSort(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))
}




function quickSort(ary, left, right) {
    if (left >= right) {
        return ary;
    }
    let base = ary[left];
    let i = left,
        j = right;
    let baseSort = ary[left]['sort'];
    while (i < j) {
        // 从右边起,寻找比基数大的数
        while (i < j && ary[j]['sort'] <= baseSort) {
            j--;
        }
        // 从左边起,寻找比基数小的数
        while (i < j && ary[i]['sort'] >= baseSort) {
            i++;
        }
        if (i < j) {
            var temp = ary[i];
            ary[i] = ary[j];
            ary[j] = temp;
        }
    }
    ary[left] = ary[i];
    ary[i] = base;
    quickSort(ary, left, i - 1);
    quickSort(ary, i + 1, right);
    return ary;
}