其他分享
首页 > 其他分享> > std::sort 的注意事项

std::sort 的注意事项

作者:互联网

Luogu P1177 【模板】快速排序

\(\Large{AC}\) 代码:

#include<bits/stdc++.h>
using namespace std;
int n,a[100010]; 
bool cmp(int x,int y){
    return x<y;
}
signed main(){
    cin>>n;
    for(int i=0;i<n;i++) cin>>a[i];
    sort(a,a+n,cmp);
    for(int i=0;i<n;i++) cout<<a[i]<<("\n "[i!=n-1]);
    return 0;
}

\(\Large{TLE}\) 代码:

#include<bits/stdc++.h>
using namespace std;
int n,a[100010]; 
bool cmp(int x,int y){
    return x<=y;
}
signed main(){
    cin>>n;
    for(int i=0;i<n;i++) cin>>a[i];
    sort(a,a+n,cmp);
    for(int i=0;i<n;i++) cout<<a[i]<<("\n "[i!=n-1]);
    return 0;
}

有木有发现就是第 \(5\) 行的 <<= 的区别...

这是由于 std::sortcmp(x,y) 类似于:

现在 xy 后(右)边,cmp 返回 x 是否应该超到 y 的前(左)边。

那为什么 <= 会 \(\Large{TLE}\) 呢?

由于 std::sort 中的某些蜜汁操作,当有两个值相同的元素 \(x,y\) 时,程序里会反复交换 \(x,y\),导致 \(\Large{TLE}\)。

所以啊,

std::sortcmp 时,若两个元素判定为相同的,请务必输出

\[\Large{False} \]

标签:std,sort,int,Large,TLE,注意事项,cmp
来源: https://www.cnblogs.com/zhangshaojia/p/15257841.html