如何检查数组是升序还是降序?

时间:2020-04-30 08:39:34

标签: c arrays

我所拥有的功能是检查数组并根据是否排序对输出进行输出。

要使用称为 my_is_sort()的函数,我创建了其他函数,该函数可以按升序和降序为我对数组进行排序:

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

typedef struct{
    int size;
    int* array;
} integer_array; //structure of integer array

integer_array* ascendingSortedArray(integer_array* param_1){ //function that sorts array in asc. order

    integer_array* minToMax = param_1;

    int arrLen = param_1->size;

    for (int i = 0; i < arrLen; i++){
        for (int j = 0; j < arrLen; j++){
            if (param_1->array[j] >= param_1->array[i]){
                int temp = minToMax->array[i];         
                minToMax->array[i] = minToMax->array[j];            
                minToMax->array[j] = temp;             
            }  
        }
    }

    return minToMax; //returning pointer to ascending array

}

integer_array* descendingSortedArray(integer_array* param_1){ //function that sorts array in desc. order

    int arrLen = param_1->size;
    integer_array* maxToMin = param_1;

    for (int i = 0; i < arrLen; i++){
        for (int j = 0; j < arrLen; j++){
            if (param_1->array[j] <= param_1->array[i]){
                int temp = maxToMin->array[i];         
                maxToMin->array[i] = maxToMin->array[j];            
                maxToMin->array[j] = temp;             
            }  
        }
    }

    return maxToMin; //returning pointer to ascending array

}

int my_is_sort(integer_array* param_1) {

    integer_array* minToMaxArr = ascendingSortedArray(param_1);
    integer_array* maxToMinArr = descendingSortedArray(param_1);

    for(int i=0; i<param_1->size; i++){
        if(param_1->array[i]!=minToMaxArr->array[i] && param_1->array[i]!=maxToMinArr->array[param_1->size-i-1]){
            return 0; //checking if element at index i is same as the ith element of ascending array or (arrayLen-i-1)the element of descending array. E.g. if 1st element of passed array is not as same as 1st element of asc. array and last element of desc. array, it returns 0
        }
    }

    return 1;

}

然后进行测试,我已经将一些数组传递给了我的函数。例如,首先,当我通过 [-2,-1]时,我确实传递了 [1,1,2] 该函数返回了 1 (是正确的)。 ,1] ,它又返回了 1 (是正确的)。但是随后我通过了 [4、7、0、3] ,输出为1,尽管它必须为0,因为传递的数组未按任何顺序排序。问题的根源是什么?

这是 main()中的测试用例失败:

int main(){

    int arr[] = {4, 7, 0, 3};
    integer_array* result = malloc(sizeof(integer_array));

    result->array = arr;
    result->size = 4;

    int sorted = my_is_sort(result);

    printf("%i\n", sorted);
}

2 个答案:

答案 0 :(得分:0)

我可能会做些类似的事情

bool IsSorted(int[] a, int size)
{
  if (size < 3)
    return true;
  int state = 0; // 0 = unknown, 1 = asc, 2 = desc
  int p = a[0];
  for (int i = 1; i < size; i++)
  {
    int x = a[i];
    if (p < x)
    {
      switch(state)
      {
        case: 0: state = 1; break;
        case  2: return false;
      }
    } else if (p > x)
    {
      switch(state)
      {
        case: 0: state = 2; break;
        case  1: return false;
      }
      p = x;
  }
  return true;
}

答案 1 :(得分:0)

我不知道它是否会对您有所帮助,但我的测试表明,在函数my_is_sort中,每个integer_array*都在降序(param_1minToMaxArr,{{1} }),这就是为什么一切都是1的原因,但是我真的不能说出原因。