快速排序

Posted boht

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序相关的知识,希望对你有一定的参考价值。

三路快速排序:思想就是将一块数据分为三个部分,分别为<v,=v,>v三部分。5个下标值。l:为左下标值 r:为右下标值 lt:为<v的边界下标 gt:为>v的边界下标。i:为检索值

1:当arr[i]>v时,将arr[i]的值和arr[gt-1]的值进行互换,此时i处的值同样的还没有被处理过。gt=gt-1

2:当arr[i]<v时,将arr[i]的值和arr[lt+1]的值进行互换。此时lt=lt+1;i=i+1;

3:当arr[i]=v时,不做任何处理,直接将i=i+1;

template <typename T>
void __qiuckSort3(T arr[],int l,int r)
{
    if(r-l<=15) {
        insertinonSort(arr, l, r);
        return;
    }
    // partition
    swap(arr[l],arr[rand()%(r-l+1)+l]);
    T v=arr[l];

    int lt=l; //arr[l+1..lt)<v
    int gt=r+1; //arr(gt..r]>v
    int i=l+1; //arr[lt+1..i) == v
    while(i<gt)
    {
       if(arr[i]<v && i<=r ){
           swap(arr[i],arr[lt+1]);
            i++;
            lt++;
        }
        else if(arr[i]>v)
       {
            swap(arr[i],arr[gt-1]);
            gt--;
        }
        else {
           i++;
       }
    }
    swap(arr[l],arr[lt]);
    __qiuckSort3(arr,l,lt-1);
    __qiuckSort3(arr,gt,r);
}
template <typename T>
void qiuckSort3(T arr[],int n)
{
    srand(time(NULL));
    __qiuckSort3(arr,0,n-1);
}

 

以上是关于快速排序的主要内容,如果未能解决你的问题,请参考以下文章

算法排序之堆排序

前端开发工具vscode如何快速生成代码片段

前端开发工具vscode如何快速生成代码片段

如何使用sublime代码片段快速输入PHP头部版本声明

代码片段如何使用CSS来快速定义多彩光标

vs2003:快速片段工具