快速排序

来源:互联网 发布:主人网络怎么开启 编辑:程序博客网 时间:2024/06/07 23:37

快速排序的优点在于在合适的位置进行分割并且不用额外的数组。

#include <vector>using namespace std;template <typename Comparable>void quickSort(vector<Comparable> & a){    quickSort(a,0,a.size()-1);}//三位中值分割template <typename Comparable>const Comparable & median3(vector<Comparable> & a,int left,int right){    int center=(left+right)/2;    if(a[right]<a[left])        std::swap(a[center], a[left]);    if (a[right]<a[center])        std::swap(a[right], a[center]);    if(a[center]<a[left])       std::swap(a[center], a[left]);    std::swap(a[center], a[right-1]);    return a[right-1];  //将pivot放在right-1的位置}template <typename Comparable>void quickSort(vector<Comparable> & a,int left,int right){    if(left+10<=right)  //当数量比较少时,使用插入排序效果较好    {        const Comparable & pivot=median3(a, left, right);        int i=left,j=right-1;        for(;;)        {            while (a[++i]<pivot) {}            while (pivot<a[--j]) {}            if(i<j)                std::swap(a[i], a[j]);            else                break;        }        std::swap(a[i], a[right-1]);        quickSort(a, left, i-1);        quickSort(a,i+1,right);    }    else    {        insertionSort(a);    }}/* int i=left+1,j=right-2; for(;;) {    while(a[i]<pivot){++i}    while(pivot<a[j]){--j}    if(i<j)    {        std::swap(a[i],a[j]);        i++;        --j;    }    else    {        break;    } */
原创粉丝点击