/*
快速排序:采用函数的递归,对待排序列分成两部分进行排序。
分类:取最左边元素作为参照元素,或者中间元素
排序稳定性:不稳定
时间复杂度:O(N*logN)
空间复杂度:O(1)
*/
#include<iostream>
using namespace std;
int a[8] = { 36,25,48,12,25,43,20,28 };
//快速排序
void QuickSort(int left, int right) {
if (left > right) return;
int i = left, j = right;
int base = a[left];
//先整个处理,再分段处理
while (i < j) {
while (i < j && a[j] >= base) j--; //i右移到大于参考值处
while (i < j && a[i] <= base) i++; //j左移至小于参考值处
if (i < j) {
swap(a[i], a[j]); //交换i和j处数值
}
}
swap(a[left], a[i]); //交换参考值
QuickSort(left, j - 1); //左段进行快排
QuickSort(j + 1, right); //右段进行快排
}
int main() {
int n = 8;
QuickSort(0, n - 1);
//打印输出
for (int i = 0; i < n - 1; i++) {
cout << a[i] << " ";
}
cout << a[n - 1] << endl;
return 0;
}