如果要基于时间升序排序,源代码中会出现什么错误?
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;
}
}
}
答案 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;
}
}
}
尝试一下。再见!