/** 快速排序
 *  快速排序是对冒泡排序的一种改进,
 *  第一趟排序时将数据分成两部分,一部分比另一部分的所有数据都要小。
 *  然后递归调用,在两边都实行快速排序。
 * **/

function quickSort(arr) {
  if (arr.length <= 1) {
    return arr;
  }
  let midIndex = Math.floor(arr.length/2);
  const midValue = arr.splice(midIndex,1)[0];
  let left = [];
  let  right = [];
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] < midValue) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }

  // return [7, 6].concat([8], [10, 9]);
  // return left.concat([midValue], right);
  // 递归调用 在左右两边都执行快速排序
  return quickSort(left).concat([midValue], quickSort(right));
}

let arr = [1, 4, 2, 1, 5, 2, 8, 6, 9, 7];
let result = quickSort(arr);
console.log(result);