关注
块排最重要的就是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-26 10:52
广州理工学院 后端工程师 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 2025年终总结 #
170017次浏览 2866人参与
# 找工作,行业重要还是岗位重要? #
85065次浏览 1683人参与
# 职场上哪些行为很加分? #
306292次浏览 3446人参与
# 大家每天通勤多久? #
69277次浏览 439人参与
# 你面试体验感最差/最好的公司 #
15454次浏览 251人参与
# 实习的内耗时刻 #
210676次浏览 1536人参与
# 互联网行业现在还值得去吗 #
46791次浏览 351人参与
# 一人说一个提前实习的好处 #
9372次浏览 187人参与
# 今年你最想重开的一场面试是? #
3331次浏览 61人参与
# 秋招落幕,你是He or Be #
9741次浏览 203人参与
# 重来一次,你会对开始求职的自己说 #
5592次浏览 140人参与
# 实习没事做是福还是祸? #
15569次浏览 234人参与
# 团建是“福利”还是是 “渡劫” #
6692次浏览 144人参与
# 我的第一份实习怎么找的 #
208414次浏览 1827人参与
# 你小心翼翼的闯过多大的祸? #
10648次浏览 155人参与
# 比亚迪工作体验 #
74213次浏览 280人参与
# 大厂VS公务员你怎么选 #
74217次浏览 681人参与
# 工作中听到最受打击的一句话 #
5607次浏览 101人参与
# 面试吐槽bot #
164930次浏览 813人参与
# 大家实习每天都在干啥 #
106369次浏览 577人参与