快速排序—C++实现
快速排序虽然看着不难、理解起来也很简单,但是值得注意的点还是有很多,一不小心就踩坑!首先:快排的思想是:选定一个基准为,采用双指针的方法,左指针找比基准位小的数,右指针找比基准位大的数,进行交换,最后的结果就是,基准位左边的都是比它小的数,基准位右边都是比它大的数,再分别对这两个区间进行递归排序!
- 双指针的顺序要注意
- 退出递归的条件不能少
- 循环嵌套循环
具体实现:
#include<iostream>
using namespace std;
void QuickSort(int arr[], int left, int right)
{
if (left >= right) return;//这是退出递归的条件,一定要写
int i = left;
int j = right;
int base = arr[left];//选取第一个元素做基准
while (i < j)
{
while (j > i && arr[j] >= base)//右指针一定要先写
j--;
while (i < j && arr[i] <= base)//左指针后写
i++;
if (i < j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
arr[left] = arr[i];
arr[i] = base;//基准位更换
QuickSort(arr, left, i - 1);//比基准位小的都排在左边,在左区间进行递归
QuickSort(arr, i + 1, right);//比基准位大的都排在右边,在右区间进行递归
}
int main()
{
int arr[] = { 1,9,8,7,2,4,5,6,3,10 };
int len = sizeof(arr) / sizeof(arr[0]);
QuickSort(arr, 0, len - 1);
for (int i = 0; i < len; i++)//遍历输出
{
cout << arr[i] << " ";
}
cout << endl;
}