#include <iostream>
using namespace std;
int cmp = 0; // 总共执行比较操作的次数
int swp = 0; // 总共执行交换操作的次数
int partition(int a[], int p, int r)
{
int x = a[r];
int i = p-1;
for(int j=p; j<=r-1; j++)
{
cmp++;
if( a[j] < x )
{
i++;
swp++;
swap(a[i], a[j]); // 小于x的放到前面,不稳定
}
}
i++;
swp++;
swap(a[i], a[r]);
return i;
}
void quickSort(int a[], int p, int r)
{
if( p < r )
{
int q = partition(a, p, r);
quickSort(a, p, q-1);
quickSort(a, q+1, r);
}
}
int main()
{
int a[] = {4, 1, 3, 2, 16, 9, 10, 14, 8, 7};
quickSort(a, 0, sizeof(a)/sizeof(a[0])-1);
cout << "总共进行比较 " << cmp << " 次,总共进行交换 " << swp << " 次" << endl;
for(int i=0; i<sizeof(a)/sizeof(a[0]); i++)
{
cout << a[i] << " ";
}
cout << endl;
return 0;
}