算法思想
快速排序是一种交换排序,它的基本思想是:先选一个元素作为基准,将大于它的元素都放到它的右边,小于它的元素都放到它的左边,然后在它的左右两边再各找一个基准,同样让这个两个基准的左右两边都满足左边都小于自己,右边都大于自己,以此循环往复下去,直到不能再分。
算法实现
#include<iostream>
#include<vector>
using namespace std;
int Partition(vector<int> &v, int low, int high);
void QuickSort(vector<int> &v, int low, int high);
int main()
{
vector<int> v{12,3,5,1,34,9,23,16,38,8,6};
for (auto i : v)
{
cout << i << " ";
}
cout << endl;
QuickSort(v, 0, v.size()-1);
for (auto i : v)
{
cout << i << " ";
}
cout << endl;
while (1);
return 0;
}
void QuickSort(vector<int> &v, int low, int high)
{
int p;
if (low < high)
{
p = Partition(v, low, high);
QuickSort(v, low, p-1);
QuickSort(v, p+1, high);
}
}
int Partition(vector<int> &v, int low, int high)
{
int base = v[low];
int temp;
while (low < high)
{
while (low < high && v[high] >= base)
{
--high;
}
v[low] = v[high];
while(low < high && v[low] <= base)
{
++low;
}
v[high] = v[low];
}
v[low] = base;
return low;
}
程序运行结果如下图:
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/825c056b1ef2cf659e5d1b0eedfa7f9b.png)
上面这种写法也是很主流的一种写法,利用递归的方法,整个代码简介紧凑。特在此记录,以备不时之需。