块排最重要的就是partition()操作,如果是普通的快速排序,暂且叫partition(),可以采用随机区标志位进行划分;双路快排就是出现=标志位很多时,进行的优化;三路快排就是解决=标志位很多的情况。 具体partition()函数如下: template<typename T> int __partion(T arr[],int l,int r) {     int index=rand()%(r-l+1)+l;     swap(arr[l],arr[index]);     T temp=arr[l];     int j=l;     for(int i=l+1;i<=r;i++)     {         if(arr[i]<temp)         {              swap(arr[j+1],arr[i]);              j++;         }     }     swap(arr[l],arr[j]);     return j; } template<typename T> int __partion2(T arr[],int l,int r) {     int index=rand()%(r-l+1)+l;     swap(arr[l],arr[index]);     T v=arr[l];     int i=l+1;     int j=r;     while(true)     {         while(i<=r&&arr[i]<=v)             i++;         while(j>l&&arr[j]>=v)             j--;         if(i<j)             swap(arr[i++],arr[j--]);         else             break;     }     swap(arr[l],arr[j]);     return j; } 三路快排就不写了,可以去看数据结构与算法。 其实排序算法中,到小范围的排序都可以采用插入排序,这也是一步优化。
点赞 评论

相关推荐

11-28 13:56
已编辑
吉林建筑大学
所有好工作吻上来:最近可能压力比较大吧,面试的时候已经不屑于去说一些违心的话了,今天这场面试我真是没控制住啊,感觉我已经要发火了
实习学到最有价值的工作习...
点赞 评论 收藏
分享
zzzilik:四个月实习做了3个项目不觉得很假吗,真没必要写这么多吧我感觉挑点核心的重点写一下我感觉会好点
你的简历改到第几版了
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务