void QuickSort(int *arr, int begin, int end)
{
? ? ? ? if (begin >= end)
? ? ? ? {
? ? ? ? ? ? ? ? return;
? ? ? ? }
? ? ? ? int left = begin;
? ? ? ? int ?right = end;
? ? ? ? int key = begin;
? ? ? ? while (begin < end)
? ? ? ? {
? ? ? ? ? ? ? ? while (end>begin && arr[end] >= arr[key])
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? --end;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? while (end>begin && arr[begin] <= arr[key])
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ++begin;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? swap(arr[begin], arr[end]);
? ? ? ? }
? ? ? ? swap(arr[end], arr[key]);
? ? ? ? key = end;
? ? ? ? QuickSort(arr, left, key - 1);
? ? ? ? QuickSort(arr, key + 1, right);
}
?