// a = a ^ b;
// b = a ^ b;
// a = a ^ b;
void swap(T& a, T& b) {
T t = a;
a = b;
b = t;
}
/*
* 快速排序
*/
void sort(T arr[], int len) {
if(len < 2) { return; }
swap(*arr, arr[len>>1]);
T* left = arr + 1;
T* right = arr + len + 1;
T bound = *arr;
while(left < right) {
while(*left < bound && left < right) left++;
while(*right >= bound && right > arr) right--;
if(left < right) { swap(*right, *left); }
}
if(bound > *right) { swap(*arr, *right); }
sort(arr, right-arr);
sort(right+1, len+arr-right-1);
}