C++算法八:快速排序

  • 最流行的排序算法,速度最快的排序算法
  • 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;
}


猜你喜欢

转载自blog.csdn.net/ziyouyi111/article/details/80501430
今日推荐