我试图检查数组是否在不使用循环的情况下进行排序。它正常工作,即e。如果我有一个元素按升序排列的数组,则printf执行,因为我得到了#34; Sorted。"但
printf("Array 1 returns: %d \n\n", sortCheck(arr1, SORTED1));
返回0?为什么是这样?
感谢。这是整个代码。
#include<stdio.h>
const int SORTED1 = 5;
int sortCheck (int arr[], int arrSize);
int indexCounter = 0;
int main()
{
int arr1[] = {1,2,3,4,5};
printf("Array 1: \n");
printf("Array 1 returns: %d \n\n", sortCheck(arr1, SORTED1));
indexCounter = 0;
return 0;
}
int sortCheck(int arr[], int arrSize)
{
if ( (arr[indexCounter]==arr[arrSize-1]) && (indexCounter==arrSize-1) )
{
printf("Sorted. \n");
return 1;
}
if ( arr[indexCounter] <= arr[indexCounter+1] )
{
indexCounter++;
sortCheck(arr, arrSize);
}
else
{
printf("Not sorted.");
return 0;
}
}
答案 0 :(得分:5)
由于缺少return
语句,您看到了未定义的行为。
if ( arr[indexCounter] <= arr[indexCounter+1] )
{
indexCounter++;
// Problem. Missing return.
sortCheck(arr, arrSize);
}
将违规行更改为:
return sortCheck(arr, arrSize);
答案 1 :(得分:0)
以下更改应打印值1
int sortCheck(int arr[], int arrSize)
{
int val = 0;
if ( (arr[indexCounter]==arr[arrSize-1]) && (indexCounter==arrSize-1) )
{
printf("Sorted. \n");
return 1;
}
if ( arr[indexCounter] <= arr[indexCounter+1] )
{
indexCounter++;
val = sortCheck(arr, arrSize);
return val;
}
else
{
printf("Not sorted.");
return 0;
}
}
答案 2 :(得分:0)
sortCheck()函数不检查数组是否已排序。
这有两个原因。
1)当调用递归调用时,返回的值被忽略,因此有关特定字节对的信息将丢失。
2)始终传递索引(arrSize),而不是当前字节索引的偏移量
即。整个sortCheck()函数需要重新设计。
在调用递归sortCheck()的路径中使用调试器(或参数的printf)可以揭示这一事实。