查找数组中的数字是否按顺序排列

时间:2013-02-05 06:27:21

标签: c

我有一个包含5个元素的数组(1024,1025,1026,1027,1028)。如何检查这些元素是否顺序。如果数组中包含偶数个元素,我也可以这样做。

4 个答案:

答案 0 :(得分:2)

遍历数组并确保前一个成员(如果存在)等于当前减去1

for (int i = 1; i < 5; i++) {
     if (arr[i - 1] != arr[i] - 1) {
          // It's not sequential.
          break;
     }
}

答案 1 :(得分:0)

简单地遍历数组:

bool is_sequence(int *arr, int size) 
{
    int i;

    for(i = 0; i < (size - 1); i++)
    {
        if((arr[i] + 1) != arr[i])
            /* array is not sequential */
            return false;
    }

    /* array is sequential */
    return true;
}

<...>
if(is_sequence(my_array, 5))
    printf("sequential!"
else
    printf("not sequential");

答案 2 :(得分:0)

你应该比较两个相邻的数字,你必须多次做同样的事情。所以,循环是必要的。一个简单的程序如下。

#include<stdio.h>
int main()
{
    int a[5]={1024,1025,1026,1027,1028};
    int i,s;
    for(i=0;i<4;i=i+1)
    {
        if(a[i]+1 != a[i+1])
        {  s=-1; break; }
        else
        {  s=0; }
    }
    if(s=0)
    { printf("sequential."); }
    else
    { printf("not sequential."); }
}

我希望我的回答可以帮到你。谢谢。

答案 3 :(得分:0)

我会建议这个解决方案(如果只说sequential你的意思是ordered):

#include <stdio.h>

int isArraySequential(int * array, int size) {
    int isAscendingFirst;
    int isAscendingCurrent;
    int isChangeFound = 0;
    int i;

    // arrays of length 0/1/2 are assumed to be sequential
    if (size < 3)
      return 1;

    for (i=1; i < size; i++) {
      // in case there is a change
      if (array[i] != array[i-1]) {
          isAscendingCurrent = (array[i] > array[i-1]);
          // on first change
          if (!isChangeFound) {
            isChangeFound = 1;
            isAscendingFirst = isAscendingCurrent;
          }
          // on subsequent changes
          else {
            if (isAscendingFirst != isAscendingCurrent)
              return 0;
          }
      }
    }

    return 1;
}

int main(){
  int array1[4] = {1, 1, 0, -1};
  int array2[4] = {2, 2, 2, 2};
  int array3[4] = {1, 2, 4, 3};

  printf("Is array1 sequential ? %d\n", isArraySequential(array1, 4));
  printf("Is array2 sequential ? %d\n", isArraySequential(array2, 4));
  printf("Is array3 sequential ? %d\n", isArraySequential(array3, 4));

  return 0;
}

因为通常顺序数组可以是ascending OR descending顺序,这必须考虑在内。还有一些极端情况 - 长度为0/1/2的数组总是顺序的(我不确定长度为0)。

编辑:当第一个数组元素具有相同的值时,我修复了代码。现在它应该工作正常。