#include <iostream>
using namespace std;
void QuikSort(int a[], int low, int high) //O(nlogn)
{
if (low < high)
{
int i = low;
int j = high;
int pv = a[i]; //基准数 挖坑
while(i < j)
{
while(i < j && pv <= a[j]) //从右边找到第一个 小于pv的数
j--;
if (i < j)
{
a[i++] = a[j]; //填坑a[i]的位置 现在a[j]是坑
}
while(i < j && pv >= a[i]) //从左边找到第一个 大于pv的数
i++;
if (i < j)
{
a[j--] = a[i]; //填坑a[j]的位置 现在a[i]是坑
}
}
a[i] = pv; //填坑a[i]的位置 位置是对的
QuikSort(a, low, i-1); //排序a[i]前面的数
QuikSort(a, i+1, high); //排序a[i]后面的数
}
}
void main()
{
int a[] = {34,65,12,43,67,5,78,10,3,70};
int len = sizeof(a)/sizeof(*a);
cout << "排序前:";
for(int i = 0; i < len; i ++)
cout << a[i] << " ";
cout << endl;
QuikSort(a, 0, len-1);
cout << "排序后:";
for(int i = 0; i < len; i ++)
cout << a[i] << " ";
cout << endl;
system("pause");
}