为什么升序排序C ++无法正常工作?

时间:2020-07-23 09:49:26

标签: c++

如果要基于时间升序排序,源代码中会出现什么错误?

struct pelari {char nama [10]; int jam,menit,detik,usia,total;} pelari lari [10]

int main() { int i,n,j,tmp

cout <<“ Masukan banyak peserta:”; cin >> n;

for(i=0;i<n;i++)
{
    for(j=i;j<n;j++)
    {
        if(lari[i].total>lari[j])
        {
            tmp=lari[j].total;
            lari[j].total=lari[i].total;
            lari[j]=tmp;
        }
    }
}

2 个答案:

答案 0 :(得分:2)

您应该使用适当的比较器致电std::sort

std::sort(std::begin(lari), std::end(lari), [](auto & lhs, auto & rhs) { return lhs.total > rhs.total; });

答案 1 :(得分:0)

我认为问题在于您用来比较lari[i].total>lari[j]的方式;我认为您应该使用lari[i].total>lari[j].total进行修复。 但是,更深入地看,我认为“交换”中​​也存在问题,因为您应该具备以下条件:

tmp=lari[j].total;
lari[j].total=lari[i].total;
lari[i].total=tmp;

因此,代码变为:

for(i=0;i<n;i++) {
    for(j=i;j<n;j++) {
        if(lari[i].total>lari[j].total) {
            tmp=lari[j].total;
            lari[j].total=lari[i].total;
            lari[i].total=tmp;
        }
    }
}

尝试一下。再见!