/**************************** 快速排序 Quick Sort ************************************************/
template <class T>
inline void SP(T& a, T& b)
{
if (a == b) return;
T tmp = a;
a = b, b = tmp;
}
int partition(int arr[], int left, int right) //找基准数 划分
{
int tmp = arr[left];
int i = left + 1;
int j = right;
while (i <= j)
{
while (i <= j && arr[i] < tmp) ++i;
while (j >= i && arr[j] > tmp) --j;
if (i < j) SP(arr[i++], arr[j--]);
}
SP(arr[j], arr[left]);
return j;
}
void QS(int arr[], int left, int right)
{
if (left >= right) return;
int j = partition(arr, left, right);
QS(arr, left, j-1);
QS(arr, j+1, right);
}