【问题标题】:C++ sorting function for scheduling program调度程序的C++排序函数
【发布时间】:2016-02-18 04:39:41
【问题描述】:

我有一个任务,其中给了我一个包含开始时间和结束时间的活动列表,我需要让它为当天安排尽可能多的活动,假设只有一个房间可以使用。因此,事件按结束时间排序。我应该实现的排序算法如下:

sort() — 对浮点数组 data[] 进行排序的函数,创建一个排序索引数组。 sort() 函数不对数据进行排序,而是填充数组 indx[] 以便 数据[indx[0]],数据[indx[1]],...,数据[indx[NUM_EVENTS - 1]] 是按升序排列的 data[] 的值。

我对它到底在问什么有点困惑,但无论如何这就是我目前所拥有的:

void sort(float data[], int indx[], int len){
  int temp;
  for (int i = 0; i < len; i++){
    for (int j = 0; j < len; j++){

      if (data[j] > data[j+1]){
        temp = data[j];
        indx[j] = data[j+1];
        indx[j+1] = temp;

      }
    }
  }
}

此代码可以编译,但行为不正常。当我尝试打印 indx[] 中的内容时,我得到了奇怪的结果。任何帮助是极大的赞赏。谢谢!

【问题讨论】:

  • 您能否交叉检查数组indx 中的元素是否在[0, NUM_EVENTS-1] 范围内?可能是问题所在。
  • 是的,我认为这不是问题
  • 好的,我正在调查。

标签: c++ sorting scheduling


【解决方案1】:

您正在读取未初始化的内存。您正在将元素从data 复制到indx,但仅限于data[j] &gt; data[j + 1]。如果连续两次不正确,则您有一个未分配值的 indx 元素。它有一个不确定的随机位值,由之前使用过的内存留下,读取它是未定义的行为。

【讨论】:

  • 所以我只需要添加一个 else 就可以解决这个问题吗?
  • @MatthewHanson 好吧,从技术上讲,您的解决方案是正确完成作业。您需要填写indx,以便它按升序保存data 元素的索引。 data[indx[0]] 应该是data 中的最小元素。这意味着indx 中的每个元素都将被设置,并且您不会遇到这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多