最流行的排序算法,速度最快的排序算法
1962年 C.A.R. Hoare发明的快速排序算法
pivot枢纽,枢轴
递归
快排选一个枢轴,比枢轴小的放左边,把比枢轴大的放右边,然后左右边递归。
左边开始找一个比枢轴大的,从右边开始找一个比枢轴小的,然后进行交换。
#include<iostream>
using namespace std;
template<class T>
void QuickSort(T *a, const int left, const int right){
if (left < right){
//选枢轴进行划分
int i = left;
int j = right+1;//为什么要加1
int povit = a[left];
//划分算法
do{
do i++; while (a[i] < povit);
do j--; while (a[j] > povit);
if (i < j)swap(a[i], a[j]);
} while (i < j);
swap(a[left], a[j]);
//递归
QuickSort(a, left, j - 1);
QuickSort(a, j + 1, right);
}
}
int main(){
int k[] = { 2, 4, 6, 8, 0, 1, 3, 5, 7, 9, 100 };
QuickSort(k, 0, 9);
for (int i = 0; i < 10; i++){
cout << k[i] << endl;
}
system("pause");
return 0;
}
right加1是因为对数组右边多加一位数字,简化算法的比较时间。
总结:快速排序选左边选右边作为枢轴都是可以的。