社区讨论
我写出来一个比std::sort快的快排!!
P1177【模板】排序参与者 8已保存回复 10
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 10 条
- 当前快照
- 1 份
- 快照标识符
- @lw4uw85x
- 此快照首次捕获于
- 2024/05/13 19:03 2 年前
- 此快照最后确认于
- 2024/05/13 21:08 2 年前
void insert_sort(int v[],int l,int r){
CPPint i,j,temp;
for (i = l;i <= r;i++){
temp = v[i];
for (j = i - 1;j >= l && temp < v[j];j--) v[j + 1] = v[j];
v[j + 1] = temp;
}
}
void quik_sort(int v[],int l,int r){
CPPstd::stack <std::pair <int,int> > s;
s.push({l,r});
while (!s.empty()){
int L = s.top().first,R = s.top().second;
int i = L,j = R,flag = v[rand() % (R - L + 1) + L];
s.pop();
if (R - L <= 16){
insert_sort(v,L,R);
continue;
}
do{
while (v[i] < flag) i++;
while (v[j] > flag) j--;
if (i <= j)
std::swap(v[i],v[j]),i++,j--;
}while (i <= j);
if (L < j) s.push({L,j});
if (i < R) s.push({i,R});
}
}
CPP原先我的代一直比std::sort慢个10毫秒左右,现在
还能快个1ms!!!并且通过下一题测试也发现速度更
快(那题都用scanf读入,我的最长868ms,
std::sort最快870ms),(本题都使用fread版本快
读,我的16ms,std::sort17ms)
回复
共 10 条回复,欢迎继续交流。
正在加载回复...