排序算法的行为不正确

时间:2014-09-25 08:19:46

标签: c arrays algorithm sorting

我正在编写排序算法。目前,我正在尝试使用已排序的元素填充数组。我相信这是一种冒泡排序方法。基本上,我所做的是根据得分最高得分排在最佳匹配[0]等等。对于每一行我运行stage3()。

所以,基本上,我取得分数(每一行的分数),然后将它与数组中的内容进行比较,然后根据其等级相加加入。它不起作用。我为每个输入行打印的print语句只打印该行的分数(假设它不为零)。我能帮忙吗?

void
stage3(double Score, line_t * linePtr) {
    int j = 0;

    line_t line;
    size_t maxSz = MAX_LINELEN;
    int scorecmp(int j, double Score, line_t * linePtr);

        if (Score != 0 ) {
            if (j < TOP_SCORING_MAX) {
                scorecmp(j, Score, linePtr);
                j++;
            } /* fill up array */

            else {
                /* compare with last element
                  if greater than last element, check against
                  every element, moving it down while the thing
                  is bigger
                  when it is less than element, put it in that gap
                  */
        }
        }
    }   

这是第二个功能

int
scorecmp(int j, double Score, line_t * linePtr) {
    line_t bestmatch[TOP_SCORING_MAX];
    line_t line;

    if (j == 0) {

        bestmatch[j].score = Score;
        bestmatch[j].index = linePtr->index;
        bestmatch[j].buf = linePtr->buf;

    }
    else if (line.score > bestmatch[j-1].score) {
        bestmatch[j].score = bestmatch[j-1].score;
        bestmatch[j].index = bestmatch[j-1].index;
        bestmatch[j].buf = bestmatch[j-1].buf;
        bestmatch[j-1].score = Score;
        bestmatch[j-1].index = linePtr->score;
        bestmatch[j-1].buf = linePtr->buf;
    }
    else if (line.score <= bestmatch[j-1].score) {

        bestmatch[j].score = Score;
        bestmatch[j].index = linePtr->index;
        bestmatch[j].buf = linePtr->buf;
        }


        printf("best match = %f\n",bestmatch[0].score);
return 0;   
}

当我完成此操作后,我需要将任何其他行与阵列中的最低得分进行比较。如果它更大,我需要将它与数组中的每个位置进行比较,直到它找到它的位置。

谢谢

这是line_t

的定义
typedef struct line_t 
{
  char* buf;
  int lineLength;   
  int wordCount;
  int index;
  double score;
} line_t;

1 个答案:

答案 0 :(得分:1)

在您的代码中,bestmatch []是一个本地数组。所以,每一步完成都会过期 根据你的算法,应该保留bestmatch []。

要解决此问题,您有两种方法。

简单的方法是将bestmatch []定义为全局变量 首选方法是在stage3()或pervious caller函数等特定函数中定义bestmath [],并将bestmath []传递给scorecmp()。