nb1232 2022-02-07 21:30 采纳率: 100%
浏览 42
已结题

【HELP】使用c++编写直接插入排序时遇到的问题

问题遇到的现象和发生背景

学习c++做一个小项目的过程中,其中的一个排序模块遭遇了程序崩溃的问题,经过排查解决了问题,但是其中原因我无法找到。

问题相关代码
  worker *tmp=NULL;
    int j,i;
   for( i=1;i<this->workernum;i++){
     
      if(this->workerarray[i]->num<this->workerarray[i-1]->num){
          
          tmp=this->workerarray[i];
          cout<<this->workerarray[i]->num<<endl;
         for( j=i-1;this->workerarray[j]->num>tmp->num &&j>=0  ;j--){
             this->workerarray[j+1]=this->workerarray[j];
         }
         this->workerarray[j+1]=tmp; 
      }
   }
    }

可见,只是一个直接插入排序。其中workerarray为类中指针数组,num为类中变量,个人认为关系不大。

运行结果及报错内容

我所发现的错误代码在

  for( j=i-1;this->workerarray[j]->num>tmp->num &&j>=0  ;j--)

将其中条件j>=0与this->workerarray[j]->num>tmp->num交换后程序正确

for( j=i-1;j>=0&& this->workerarray[j]->num>tmp->num ;j--)

我想要达到的结果

所以,为什么会发生这样的问题,原因是什么,希望大家可以帮助我。

  • 写回答

3条回答 默认 最新

  • [PE]经典八炮 2022-02-07 21:39
    关注

    这是一个C++的基础知识啊,&&的短路效应,&&运算符会先计算第一个表达式,如果不成立,不会再计算第二个表达式。具体到你的程序中,如果j>=0放在前面,这样如果j<0,就不会判断this->workerarray[j]->num>tmp->num,而如果j>=0放在后面,当j<0时,会先计算this->workerarray[j]->num>tmp->num,j是负数,所以就异常了。
    别忘了采纳一下,谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月15日
  • 已采纳回答 2月7日
  • 创建了问题 2月7日

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图2.0 版本点聚合中Marker的位置无法实时更新,如何解决呢?
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题