在不使用内置Max / Sort函数的情况下,在未排序的整数数组中查找最大值

时间:2015-03-10 16:04:09

标签: c# arrays integer average

请注意,数组中的所有值都可能为负数。我不能使用内置的Max或Sort功能。例如,找到一系列数字中的最大值,例如42,80,93,62,71。

有什么不同的方法可以做到这一点?我只使用内置函数进行了平均。

你不必完成它,只需指出正确的方向。

string res = “”;
int[] arr = { 42, 80, 93, 62, 71 };
for (int k = 0; k < arr.Length; k++)
{
for (int i = 0; i < arr.Length – 1; i++)
{
if (arr[i] > arr[i + 1])
{
int hold = arr[i + 1];
arr[i + 1] = arr[i];
arr[i] = hold;
}
}
res += arr[k].ToString();
arr[k] = arr[k];
}

6 个答案:

答案 0 :(得分:1)

一个简单的递归代码示例:

static int Max(int[] array, int startIndex = 0)
{
    // current value
    int current = array[startIndex];

    // stop condition for recursion
    if (startIndex + 1 == array.Length)
    {
        return current;
    }

    // recursion
    int nexts = Max(array, startIndex + 1);

    // simple comparison
    if (current >= nexts)
    {
        return current;
    }

    return nexts;
}

不是您应该使用的解决方案。使用递归来解决这个问题错误(但它表明同一问题有多种解决方案)

使用它像:

int[] array = new int[] { 5, 4, 3, 2, 6 };
int max = Max(array);

答案 1 :(得分:1)

查看序列的一种方法是{first element,tail}对。这样很明显,max是尾部的第一个元素OR max。大多数语言支持某种分裂列表/序列 - 即C#/。Net为您提供Enumerable类:

T Max<T>(IEnumerable<T> list)where T: IComparable<T>
{
    var first = list.First();    
    var tail = list.Skip(1);
    {
      if (!tail.Any())
        return first;
    }
    var maxTail = Max(tail);
    return maxTail.CompareTo(first) > 0 ? maxTail : first; 
}

注意:

  • 不能在现实生活中使用它,因为存在非递归解决方案
  • 写入迭代集合两次(对于.Any()

答案 2 :(得分:0)

这应该适合你:

    int max = int.MinValue;
    for(var i = 0; i < arr.Length; i++){
        if (arr[i] > max){
            max = arr[i];
        }
    }

我使用数据int[]{-1,-2,-152 ,-7,-5,-4,-3,-19};进行了测试,结果为-1。我将它们全部翻转为正面,然后返回152.

答案 3 :(得分:0)

为什么不

     int[] arr = { 42, 80, 93, 62, 71 };
     int maxValue = arr[0];

      foreach(int i in arr){
          if (maxValue < i) maxValue = i;
      }

      Console.WriteLine("Max Value={0}", maxValue);

答案 4 :(得分:0)

static int max = 0;

    public static int maxAmt(int [] arr, int startIndex = 0)
    {
        int current = arr[startIndex];
        int next = 0;
        if (arr[startIndex] + 1 == arr.Length && current > max)
        {
            max = current;
            return max;
        };

        if (current < max)
        {
            return max;
        };

        if(startIndex < arr.Length -1)

            next = maxAmt(arr, startIndex + 1);

        if (current > next)
            return current;
        else
            return next;

    }

答案 5 :(得分:0)

public static int MaximumNumber(params int[] numbers)
    {
        int max = 0;
        for(int i=0; i<numbers.Length-1; i++)
        {
            if( numbers[i]>numbers[i+1] & numbers[i]>max )
            {
                max = numbers[i];
            }
            else if(numbers[i+1]>max)
            {
                max = numbers[i + 1];
            }
        }
        return max;
    }