关注
块排最重要的就是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; } 三路快排就不写了,可以去看数据结构与算法。 其实排序算法中,到小范围的排序都可以采用插入排序,这也是一步优化。
查看原帖
点赞 评论
相关推荐
牛客热帖
更多
正在热议
更多
# 面试问题记录 #
19076次浏览 324人参与
# 硬件人你反向读研了吗 #
39737次浏览 608人参与
# 京东TGT #
27023次浏览 151人参与
# 硬件人秋招的第一个offer #
65528次浏览 1081人参与
# 滴滴工作体验 #
23198次浏览 123人参与
# 非技术岗投递进展 #
137535次浏览 1222人参与
# 材料进Fab厂真的劝退吗? #
36016次浏览 158人参与
# 不考虑转正,实习多久合适 #
24032次浏览 118人参与
# 机械求职避坑tips #
40996次浏览 355人参与
# 互联网回暖,腾讯要招5000+人! #
263511次浏览 4889人参与
# 面试经验谈 #
12355次浏览 189人参与
# 机械只有转码才有出路吗? #
125875次浏览 1590人参与
# 职场新人生存指南 #
331972次浏览 7128人参与
# 面试吐槽bot #
2475次浏览 31人参与
# 异地恋该为对方跳槽吗 #
23191次浏览 119人参与
# 硬件人更看重稳定还是高薪 #
38369次浏览 203人参与
# vivo求职进展汇总 #
208599次浏览 1341人参与
# 25届如何提前做秋招准备? #
163906次浏览 2451人参与
# 你遇到过哪些神仙同事 #
69299次浏览 623人参与
# 租房找室友 #
27423次浏览 144人参与
# 深信服求职进展汇总 #
188700次浏览 1694人参与