取出任意的一维整数数组中最大的值--


我首先考虑的是,该数组为一维数组。(如果是二维数组,思路是化为一维数组,再转化为新的二维数组)

我希望该数组进行比较的方式是,两两比较,保留较大的元素。

为了更直观的进行两两比较,将数组变成含有n个数组,每个数组含有两个元素。

不断循环,此过程,直到数组元素剩下两个即可。

注意:以下代码在DEV C++ 可以运行,测试了几次,运行成功。

           但是在VS2019,则无法运行......应该是不支持VAL数组。

 不知道该如何解决,以下是代码, 请指正:

// 编写一个函数,返回存储在int类型数组中的最大值,并在一个简单的程序中测试该函数。

# include 
# define ELEMENTS  2     // 二维数组中每个数组的元素个数

int aaa(int arr[],int m);

int main()
{
    int max = 0;
    int arr[] = {1,2,4,19087,19876,19654,20197,10564,12076,1098,1897};
    
    int a = sizeof(arr)/sizeof(arr[0]);          //求数组元素个数                    

    max = aaa(arr, a);                           //传递数组名,和元素个数
    
    printf("\nThe max num in the arrary is %d\n",max);

    return 0;
}

int aaa(int arr[], int m)
{ 
    int n = (m+1)/2;
    int temp[n][ELEMENTS];
    
    if(m%2 == 0)                                                     //元素为偶数个时
      {
          int k = 0;
          for (int i = 0; i < n;i++)
              for (int j = 0; j < 2; j++)
                  temp[i][j] = arr[k++];                                               
      }     

    else
    {
          arr[m] = 0;                                              //元素为奇数个时,给指向最后一个元素的下一个位置赋值为0
          for (int i = 0; i < n;i++)
              for (int j = 0; j < 2; j++)                     
               temp[i][j] = arr[m--];                             //倒序赋值                                                                         
    }
          
    int temp1[n];
    for (int i = 0; i < n ;i++)
    {
         temp1[i] = temp[i][0]>temp[i][1]? temp[i][0]:temp[i][1];
    }
    
    if(sizeof(temp1)/sizeof(temp1[0]) >2 )                     // 数组大小的条件
       {
        int x = sizeof(temp1)/sizeof(temp1[0]) ;                                          
        aaa(temp1,x);                                           //递归
       } 
    else 
    return temp1[0]>temp1[1]?temp1[0]:temp1[1];
}