我所拥有的功能是检查数组并根据是否排序对输出进行输出。
要使用称为 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);
}
答案 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_1
,minToMaxArr
,{{1} }),这就是为什么一切都是1的原因,但是我真的不能说出原因。