给定一系列开始时间和结束时间,根据结束时间对它们进行排序。
这是我的功能描述的样子
// sort() - sorts an array of floats returning sorted indices
// On return, indx[] is an array of indices such that data[indx[0]],
// data[indx[1]], ..., data[indx[len-1]] is data[] in ascending order.
// Parameters
// data[] - float array of data to be ordered
// indx[] - int array, same length as data[], to hold indices
// len - int specifying the length of data[] and indx[]
这是代码
#include<iostream>
#include<string>
#include sched.h
void sort(float data[], int indx[], int len);
int main() {
int indx[NUM_EVENTS];
int scheduledEvents[NUM_EVENTS];
int numSched;
// Sort by event ending times
sort(endTime, indx, NUM_EVENTS);
// Call greedy scheduling algorithm
numSched = sched(startTime, endTime, indx, scheduledEvents, NUM_EVENTS);
// Display scheduled events
for (int i = 0; i < numSched; i++)
printEvent(startTime[scheduledEvents[i]], endTime[scheduledEvents[i]],
description[scheduledEvents[i]]);
return 0;
}
我的排序算法导致for循环检查输出 看起来像
void sort(float data[], int indx[], int len){
for (int i = 0; i < 10; i++){
indx[i];
}
float smallestIndex;
bool flag = 1;
while (flag == 1){
flag == 2;
for (int i = 0; i < len-1; i++){
if (data[indx[i]] > data[indx[i + 1]]){
smallestIndex = indx[i + 1];
indx[i + 1] = indx[i];`
indx[i] = smallestIndex;
flag == 1;
}
}
}
for (int i = 0; i < 10;i++){
cout << data[indx[i]] << endl;
}
我做了一个看起来像
的错误&GT;警告C4806:'==':不安全操作:没有'bool'类型的值 提升为类型'int'可以等于给定的常量 1&gt; sched.obj:错误LNK2019:未解析的外部符号“void __cdecl printEvent(float,float,class std :: basic_string,class std :: allocator&gt;)“ (?printEvent @@ YAXMMV?$ basic_string的@ DU?$ char_traits @ d @ @@ STD V'$分配器@ d @ @@ 2 STD @@@ Z) 在函数_main
中引用
答案 0 :(得分:2)
bool是一种通常接受真假的类型。在内部,它作为int处理。这就是为什么你可以为它分配数值。但是,如果您想这样做,请使用int。
另请注意您的行:
flag == 2;
无效。你将flag比较为2,这个比较的结果(真或假)就在空中。这不是错误,但整个表达式都没有做任何事情。
答案 1 :(得分:2)
变量flag
只能保存两个值中的一个,所以这样就行了,留下你的其他逻辑(可能不是最有效的),“按原样。”
bool flag = true;
while (flag == true){
flag = false; // Tentative "stop"
for (int i = 0; i < len-1; i++){
if (data[indx[i]] > data[indx[i + 1]]){
smallestIndex = indx[i + 1];
indx[i + 1] = indx[i];`
indx[i] = smallestIndex;
flag = true; // Keep going.
}
}
}
答案 2 :(得分:1)
bool只能是true或false,它是二进制的。您可以将1或0分配给int以获得与您使用bool时相同的结果(如果您不想使用bool)。
你也使用==来检查等价性。单个=用于分配一个看起来像你想要做的数字,
flag == 2;
应该声明和int(或类似的东西)
int flag = 0;
flag = 2