思路

快速排序在基本思想上和归并排序是一致的,仍然坚持“分而治之”的原则不动摇,即取数组中间下标的值,再将其他值与该值相比,大于加入右数组,小于加入左数组,递归调用

实现

  1. function quickSort(arr){
  2. if(!Array.isArray(arr)){
  3. throw new TytpeError('类型错误');
  4. }
  5. let len = arr.length;
  6. // 递归出口条件
  7. if(len <= 1){return arr;}
  8. // 获取中间下标
  9. var centerindex = Math.floor(len/2);
  10. // 获取中间下标对应的值
  11. var centerElement = arr[centerindex];
  12. // 创建左右数组
  13. var leftArr = [];
  14. var rightArr = [];
  15. // 循环判断,若元素大于中间下表对应的值则加入左数组,反之加入右数组
  16. for(var i = 0;i<len;i++){
  17. if((i != centerindex) && (arr[i] >= centerElement)){
  18. rightArr.push(arr[i]);
  19. }
  20. if((i != centerindex) && (arr[i] < centerElement)){
  21. leftArr.push(arr[i]);
  22. }
  23. }
  24. //递归调用该函数
  25. return quickSort(leftArr).concat(centerElement, quickSort(rightArr));
  26. }