c_cpp 20行的快排(以尾巴为轴,与CLRS保持一致)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 20行的快排(以尾巴为轴,与CLRS保持一致)相关的知识,希望对你有一定的参考价值。

原理解析:

    3 7 8 5 2 1 9 5 4
    ^               ^
    left            right
                    pivot
    ---------------------
    3 2 8 5 7 1 9 5 4
    3 2 1 5 7 8 9 5 4
    3 2 1 4 7 8 9 5 5
          ^
          pivot
    ---------------------
    3 2 1 | 7 8 9 5 5     // 分治与递归过程
        ^           ^
    1 2 3 | 5 8 9 5 7
    | 2 3 | | 5 9 8 7
    | 2 | | | 5 7 8 9
    | | | | |   ^
              5 | 8 |
              | | | |
    ---------------------
    1 2 3 4 5 5 7 8 9
#include <algorithm>

class Solution {
  int partition(int arr[], int l, int r) {
    int index = l, pivot = arr[r];
    for (int i=l; i<r; ++i)
      if (arr[i] <= pivot) std::swap(arr[i], arr[index++]);
    std::swap(arr[index], arr[r]);
    return index;
  }
public:
  void quickSort(int arr[], int l, int r) {
    if (l < r) {
      int pivot = partition(arr, l, r);
      quickSort(arr, l, pivot-1);
      quickSort(arr, pivot+1, r);
    }
  }
};

以上是关于c_cpp 20行的快排(以尾巴为轴,与CLRS保持一致)的主要内容,如果未能解决你的问题,请参考以下文章

Python的快排应有的样子

最优美的快排代码

最优美的快排代码

返回值为int[] 的快排写法

稳定的快排

易错的快排---qsort()