执行排序和搜索C函数时出错

时间:2014-08-01 06:22:38

标签: c arrays sorting

我定义了两个函数searchsort,它们在另一个程序中使用。当我尝试运行程序时,出现错误Unexpected Input。错误是什么意思?我不知道我的代码有什么问题。

#include "helpers.h"

/**
 * Returns true if value is in array of n values, else false.
 */

      bool search(int value, int values[], int n)
      {
        values[n] = n;
        for(int i=0; i < n; i++)
        {
          if(values[n] == value && value > 0)
            return 0;
          else
            return 1;
        }
        return 0;
     }

/**
 * Sorts array of n values.
 */


    void sort(int values[], int n)
    {
      int min, swap;
      for(int i=1; i < (n-1); i++)
      {
        min = i;
        for(int j=i+1; j< n; j++)
        {
          if(values[j] < values[min])
              min = j;
        } 
        if(min != i)
        {
          swap = values[i];
          values[i] = values[min];
          values[min] = swap;
        }
      }
      return;
    }

这是我将调用上述两个函数的主程序

       #include <stdio.h>
       #include <stdlib.h>

       #include "helpers.h"

      // maximum amount of hay

       const int MAX = 65536;

      int main(int argc, string argv[])
         {
   // ensure proper usage

            if (argc != 2)
          {
           printf("Usage: ./find needle\n");
           return -1;
           }

     // remember needle

          int needle = atoi(argv[1]);

         // fill haystack
           int size;
           int haystack[MAX];
           for (size = 0; size < MAX; size++)
             {
                // wait for hay until EOF

                 printf("\nhaystack[%d] = ", size);
                  int straw = GetInt();
                    if (straw == INT_MAX)
                    {
                          break;
                     }

                   // add hay to stack

                 haystack[size] = straw;
             }
             printf("\n");

        // sort the haystack

         sort(haystack, size);

     // try to find needle in haystack

          if (search(needle, haystack, size))
            {
             printf("\nFound needle in haystack!\n\n");
             return 0;
            }
            else
           {
               printf("\nDidn't find needle in haystack.\n\n");
               return 1;
           }
        }

3 个答案:

答案 0 :(得分:0)

如果这不会导致错误,那肯定会产生错误。在搜索功能中,尽管最大索引为n,但您有一个大小为n且访问索引为n-1的数组。 此外,您的搜索循环将始终立即退出而不实际检查任何内容。我强烈建议您单步执行代码的每一行,并将值替换为变量以查看发生的情况。

答案 1 :(得分:0)

你能解释一下search()的参数究竟是什么

bool search(int value,int values[],int n)//what is value,what's n.I mean what are they 

根据你的循环代码是

for(int i=0; i < n; i++)
    {
      if(values[n] == value && value > 0)
        return 0;//returns 0 if -- if condition is true
      else
        return 1;//returns 1 if -- if condition is false
    }

Anyway if -- if condition is true or false return value is sent to calling function. so for loop ends in only one comparison so why do you use for loop???

答案 2 :(得分:-1)

将您的代码更改为此

  bool search(int value, int values[], int n)
  {
    bool flag=false;
    values[n] = n;
    for(int i=0; i < n; i++)
    {
     if(values[n] == value && value > 0)
     flag=true;


     }
     return flag;
     }

用于排序

for(int i=0; i < n; i++)
  {

    for(int j=i+1; j< n; j++)
    {
      if(values[j] < values[i])

      swap = values[i];
      values[i] = values[j];
      values[j] = swap;
    }
  }
  return;
}