双指针的话会比较简练,理解起来也很清爽,注意x的选择会影响后面的i,j,代码中已经有注释。
'''
#include <iostream>
#include <cstring>
using namespace std;
void quick_sort(int *arr, int l, int r) {
int x = arr[l];//x可以取arr中的任意
if (l >= r)
return;
int i = l - 1;
int j = r + 1;
while (i < j) {
//注意这里不要写<=和>=
do {
i++;
} while (arr[i] < x);
do {
j--;
} while (arr[j] > x);
if (i < j)
swap(arr[i], arr[j]);
}
quick_sort(arr, l, j);
quick_sort(arr, j + 1, r);
}