快速排序算法JS实现

function quickSort(arr, low, high){
      let i = low; //哨兵
      let j = high;//哨兵
      let pivot = arr[low];
      if(i >= j) {
        return;
      }
      while(i != j){
        while(i < j && arr[j] >= pivot)
          j--;
        while(i < j && arr[i] <= pivot)
          i++;
        if(i < j) {
          let temp = arr[j];
          arr[j] = arr[i];
          arr[i] = temp;
        }
      }
      arr[low] = arr[i];//每一次排序后将基准点放在正确的位置
      arr[i] = pivot;
      quickSort(arr, low, i -1);
      quickSort(arr, i + 1, high);
}

 

这样可以少一个变量:

   function quickSort(arr, low, high){
      let i = low;
      let j = high;
      let pivot = arr[low];
      if(i >= j) {
        return;
      }
      while(i != j){
        while(i < j && arr[j] >= pivot)
          j--;
        if(i < j)
          arr[i] = arr[j];
        while(i < j && arr[i] <= pivot)
          i++
        if(i < j)
          arr[j] = arr[i];
      }
      arr[i] = pivot;
      quickSort(arr, low, i -1);
      quickSort(arr, i + 1, high);
   }

快速排序运用了分治法的思想,找到一个基准点,然后将集合分成两部分,左边的小于基准点,右边的大于基准点(从大到小排序的话),这样就将问题分成了结构类似的两个小问题,递归,直到每个集合里就剩下一个数据。每一次排序肯定会给基准点找到正确的位置。

posted @ 2018-05-17 16:04  九萌萌  阅读(2589)  评论(0编辑  收藏  举报