快速排序的效率取决于选择的基准数,平均速度O(nlog(n))。
我所选择的基准数为数组中左边第一个数,这样可能会导致面对如数据序列:5,4,3,2,1时,需要的计算高度为5.如果以二分法的方式选择基准,类似这样的问题则可以解决。
直接以代码为例
#include <iostream>
#include <vector>
using namespace std;
void quicksort(int left,int right,vector<int> &arr) //left和right为了存储当前段的左、右的下标
{
//vector quicksort(int[] arr)
//快速排序的思想为在一个数组中,选择左右两端进行比较。确定基准数,在右侧j找小于基准的,左侧i
//找大于基准的,若找到时,左右两侧的下标满足i<j,则将这两个数调换。反之则改变基准,将基准与i
//此时所指值调换,并以它作为基准左右两侧再以上面的流程进行排序。
if(left>=right)
return;
int i = left