其中,left和right分别表示当前排序区间的左右端点,区间长度为1或0时停止递归。首先,选取中间端点作为基准值。然后,定义两个指针i和j分别指向左右两端,通过比较,将大于基准值的元素放到右边,小于基准值的元素放到左边,最后将基准值放到中间位置。接着,递归地对左右两个子区间进行排序,直到区间长度为1或0时停止递归。
#include <iostream>
#include<cmath>
using namespace std;
void QuickSort(int A[], int left, int right)
{
if (left >= right)return;
int i = left, j = right;
int key = A[(left + right) / 2];
while (i<j)
{
while (A[j] > key)
{
j--;
}
while (A[i]<key)
{
i++;
}
if (i <= j)
{
swap(A[i], A[j]);
i++; j--;
}
}
QuickSort(A, left, j);//注意
QuickSort(A, i, right);
}
int main()
{
int n;
cin>>n;
int *A=new int[n] ;
for(int i=0;i<n;i++)
{
cin>>A[i];
}
QuickSort(A, 0, n-1);
for (int i = 0; i < n; i++)
{
cout << A[i]<<" ";
}
}