int Partition(int* arr, int left, int right)
{
int data=arr[left];
while(left<right)
{
while(left<right&&data<=arr[right]) right--;
arr[left]=arr[right];
while(left<right&&data>arr[left]) left++;
arr[right]=arr[left];
}
arr[left]=data;
return left;
}
void QSort(int* arr, int left, int right)
{
if(left>=right)
return;
int mid=Partition(arr,left, right);
QSort(arr, left, mid-1);
QSort(arr, mid+1, right);
}
void QuickSort(int* arr, int len)
{
QSort(arr, 0, len-1);
}
快速排序非递归
int* QuickSortNo(int*arr, size_t n)
{
if(n<2) return arr;
stack<int> s;
s.push(0);
s.push(n - 1);
while (s.size())
{
int right = s.top();
s.pop();
int left = s.top();
s.pop();
if (left < right)
{
int mid = Partition(arr, left, right);
s.push(left);
s.push(mid - 1);
s.push(mid + 1);
s.push(right);
}
}
}