快速排序基本可以分为两种:递归和非递归法。又可以将区间按照基准值划分为左右两半部分进行排序,排序方法有hoare版(左右指针法)、挖坑法、前后指针法。好话不多说,上代码。
递归
快排的递归方法
```
void Quicksort(int *arr, int left, int right)
{
if (right - left > 1)
{
int div = Partion(arr, left, right);
Quicksort(arr, left, div-1);
Quicksort(arr, div+1, right);
}
}
```
hoare版(左右指针法)
首先选一个key为基准,建立一个begin=left、end=right,如果begin小于key,则begin++,如果end大于key,则end--,当begin大于key的值,而end小于key的值时,对两个数的位置进行交换,当begin遇到end时,将基准值和begin进行交换
int Partion(int* arr, int left, int right)
{
int mid = GetMidIndex(arr, left, right);
if (mid != right)
swap(&arr[mid], &arr[right]);
int begin = left;
int end = right;
int key = arr[right];
while (begin < end)
{
whil