在c ++

时间:2016-02-19 18:54:03

标签: c++ sorting

给定一系列开始时间和结束时间,根据结束时间对它们进行排序。

这是我的功能描述的样子

 // 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

中引用

3 个答案:

答案 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