如何找到一个分隔数组

时间:2017-07-30 10:30:44

标签: c arrays sorting

我已经使用冒泡排序对用户输入数组进行了排序。接下来,我有一个函数可以找到一个值,该值可以平等地分隔数组中的每个元素。 我的排序代码是这样的

注意LENGTH定义为25

void bubblesort(int dataset[])
{
  int numpasses;
  int lcv;
  int temp;

  for(numpasses = 1; numpasses < LENGTH; numpasses++)
  {
    for(lcv = 0; lcv < LENGTH - numpasses; lcv++)
    {
      if(dataset[lcv] > dataset[lcv + 1])
      {
        temp = dataset[lcv];
        dataset[lcv] = dataset[lcv + 1];
        dataset[lcv + 1] = temp;
      }
    }
  }
}

接下来我找到常数值的函数如下

int findconstant(int dataset[])
{
  int lcv;
  int constantvalue;

  for(lcv = 0; lcv < LENGTH; lcv++)
  {
    if ((dataset[lcv + 1] - dataset[lcv]) == (dataset[lcv + 2] - dataset[lcv + 1]))
    {
      constantvalue = dataset[lcv + 1] - dataset[lcv];
    }
    else
    {
      constantvalue = 0;
    }
  }
  return(constantvalue);
}

最后,我的输出代码在

之下
void printdata(int dataset[], int constantvalue)
{
  int lcv;
  if(constantvalue != 0)
  {
    for(lcv = 0; lcv < LENGTH; lcv++)
    {
      printf("Constant value %d separates the elements: %d\n", constantvalue, dataset[lcv]);
    }
  }else
  {
    printf("No constant value that separates the elements.");
  }
}

我的问题是我总是得到“没有恒定的价值来区分元素。”作为我的输出,即使我输入1到25,值1是常量值我得到错误的打印语句。谁能告诉我哪里出错了?我确定泡泡排序的代码是我从书中获取的,所以也许我找到常量值的函数是错误的。

1 个答案:

答案 0 :(得分:0)

我想循环

for (lcv = 0; lcv < LENGTH; lcv++)

应该有不同的条件,例如

for (lcv = 0; lcv < LENGTH-2; lcv++)

因为陈述

(dataset[lcv + 2] - dataset[lcv + 1])
LENGTHlcv == LENGTH-2(循环的最后两次迭代)时,

将输出大小为lcv == LENGTH-1的数组,并使用不正确的值(不是数组值)进行操作。

我认为你应该重新考虑你在findconstant中使用的方法。

<强>更新

只是为了说明你的问题的根源,运行简单的程序:

#define LENGTH 10
#include <stdio.h>

int main(void)
{
    int dataset[LENGTH];
    int lcv;
    for (lcv = 0; lcv < LENGTH; lcv++)
    {
        dataset[lcv] = 1;
    }
    for (lcv = 0; lcv < LENGTH; lcv++)
    {
        printf("%d %d %d\n", dataset[lcv], dataset[lcv + 1], dataset[lcv + 2]);
    }
}

你会看到类似的东西(不完全,但相似)

enter image description here

在我的输出中,我看到值-8589934605241012在数组附近作为dataset[LENGTH]dataset[LENGTH+1] - 也许你会采取其他值,但无论如何这样的值会导致程序结果不正确。您应该阅读有关undefined behavior的更多信息,以了解其他可能出现的问题。