- 最流行的排序算法,速度最快的排序算法
- 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; //为什么加一,为了在 如下代码 do j--;while(a[j]>pivot);判断更加方便。
int pivot = a[left];
//进行划分
do{
do i++;while(a[i]<pivot);
do j--;while(a[j]>pivot);
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[] = {8,6,4,2,0,1,3,5,7,9,99};//加多一个,比所有数要大
quicksort(k,0,9);
for(int i=0;i<10;i++)
cout <<k[i]<<endl;
system("pause");
return 0;
}