1、从需要排序的数组中选取一个基数(通常选取头元素或者尾元素),例如选取数组a[n]中的中间元素,a[l + r >> 1]
2、遍历整个数组,将小于基数的数组元素放到基数的左边,大于的放到基数右边。
3、依次递归左右两边的数组元素即可完成排序。l和r每次选取要递归元素的左右端点即可
//快速排序模板
int arr[N];
void Quicksort(int l, int r, int arr[]) //传入数组左端点,右端点,和数组
{
if(l >= r) return;
int i = l - 1, j = r + 1, mid = arr[l + r >> 1]; //mid 每次取数组的中间值
// 将小于mid的数组元素放到mid的左边,大于的放到mid右边
while(i < j)
{
do i++; while(arr[i] < mid);
do j--; while(arr[j] > mid);
if(i < j) swap(arr[i], arr[j]);
}
//递归
Quicksort(l, j, arr);
Quicksort(j+1, r, arr);
}