为啥升序排序 C++ 不能正常工作?

Posted

技术标签:

【中文标题】为啥升序排序 C++ 不能正常工作?【英文标题】:Why Ascending Sort C++ Cant Work Properly?为什么升序排序 C++ 不能正常工作? 【发布时间】:2020-07-23 09:49:26 【问题描述】:

如果要按时间升序排序,源代码中的错误是什么?

结构 pelari char nama[10];int jam,menit,detik,usia,total; 佩拉里拉里[10]

int main() 整数 i,n,j,tmp

cout>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;
        
    

【问题讨论】:

如果(lari[i].total>lari[j]) 应该怎么办? “lari”是什么类型? “什么是错误”这是应该告诉我们的事情。你得到编译器错误吗?运行时错误?输出不正确?请提供minimal reproducible example SO 是为了解决错误,而不是找到错误并解决。因此,您需要找到错误并稍微编辑问题。' 没有任何错误指示但代码不起作用,我想做升序但显示结果时没有任何反应。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

我认为问题在于您过去比较lari[i].total&gt;lari[j]的方式;我认为您应该使用lari[i].total&gt;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;
        
    

试试这个。再见!

【讨论】:

只需使用std::swap。重新发明***是在自找麻烦。 但是 std::swap 不能在 iostream 中使用 @ChristianLie 你可以在任何地方使用std::swap,这是什么意思?

以上是关于为啥升序排序 C++ 不能正常工作?的主要内容,如果未能解决你的问题,请参考以下文章

为啥程序不能正常工作?

我的 quickSort() 程序不能正常工作,为啥? [关闭]

为啥 memset() 放在循环体内时不能正常工作?

为啥必须动态分配扩展数组才能使此函数正常工作 C++

为啥 ScrollView 不能正常工作?

为啥这个查询不能正常工作?