“模板是经过千锤百炼,由各种各样的人尝试过各种各样的数据,才没有问题从而保留下来的。”
#include <iostream>
using namespace std;
//快速排序——分治思想
void quick_sort(int q[], int left, int right) {
if (left >= right) return;
int i = left - 1, j = right + 1, x = q[left + right >> 1];
//两个指针指向边界两侧,并取中间值作为分界点x(>>1相当于除以2),调整后分界点x左半边的数<=x,右半边>=x
while (i < j) {
//先把两个指针往中间移动一次,然后再去判断
do i++; while (q[i] < x);
do j--; while (q[j] > x);
if (i < j) swap(q[i], q[j]);
//如果i<j,交换
//如果没有swap函数可以利用中间变量手写交换
//int temp = q[i];
//q[i] = q[j];
//q[j] = temp;
}
//递归处理两边
quick_sort(q, left, j);//如果使用i的话可能会有边界问题
quick_sort(q, j + 1, right);
}
int main() {
int arr[5] = {3, 5, 7, 4, 1};
quick_sort(arr, 0, 4);
for (auto i: arr) {
cout << i << " ";
}
return 0;
}
输出:1 3 4 5 7