传统的随机快速排序,是选定一个数,然后以这个数为标杆,分为小于等于(标杆)区和大于(标杆)区。
改进的快速排序,分为,小于区,等于区和大于区。这个划分的过程用partition函数实现。
具体请看代码。
#ifndef QUICKSORT_H
#define QUICKSORT_H
#include<iostream>
#include<vector>
#include<ctime>
using namespace std;
void swap(vector<int>&arr, int i, int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
vector<int> partition(vector<int> &arr, int l, int r)
{
int less = l - 1;//less为小于区边界,也就是等于区的开头
int more = r;//more为大于区边界,等于区的末尾
while (l < more)
{
if (arr[l] < arr[r])//当前数小于划分值
{
swap(arr, ++less, l++);//交换当前数与小于区边界
}
else if (arr[l] > arr[r])//当前数大于划分值
swap(arr, l, --more);//交换当前数和大于区边界
else
++l;//当前数与划分值相等,啥也不干,往下看下一个数。
}
swap(arr, more, r);//当l与more遇上了,则把划分值和大于区的边界交换回来
vector<int