Как найти минимальное число си шарп

В этом посте будет обсуждаться, как найти минимальное и максимальное число из массива в C#.

1. Использование Linq

Простое решение для поиска минимального и максимального значения в последовательности значений — использование Enumerable.Min а также Enumerable.Max методы из System.Linq пространство имен.

using System;

using System.Linq;

public class Example

{

    public static void Main()

    {

        int[] arr = { 8, 3, 5, 1, 2 };

        Console.WriteLine(“Minimum number is “ + arr.Min());

        Console.WriteLine(“Maximum number is “ + arr.Max());

    }

}

Скачать  Выполнить код

результат:

Minimum number is -1
Maximum number is 8

2. Использование Array.Sort() Метод

Другой вероятный, но менее рекомендуемый способ найти минимум/максимум массива — отсортировать массив в порядке возрастания. Тогда первый и последний элементы отсортированного массива будут минимальным и максимальным элементом соответственно.

using System;

public class Example

{

    public static void Main()

    {

        int[] arr = { 8, 3, 5, 1, 2 };

        Array.Sort(arr);

        if (arr.Length > 0) {

            Console.WriteLine(“Minimum number is “ + arr[0]);

            Console.WriteLine(“Maximum number is “ + arr[arr.Length 1]);

        }

    }

}

Скачать  Выполнить код

результат:

Minimum number is -1
Maximum number is 8

3. Использование пользовательской процедуры

Наконец, мы можем написать собственную процедуру для нахождения минимального и максимального числа массива. Идея состоит в том, чтобы пройтись по массиву и отслеживать минимальное или максимальное значение, найденное на данный момент. Вот как будет выглядеть код:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

using System;

public class Example

{

    public static int findMin(int[] arr)

    {

        if (arr.Length == 0) {

            throw new Exception(“Array is empty”);

        }

        int min = int.MaxValue;

        foreach (var i in arr) {

            if (i < min) {

                min= i;

            }

        }

        return min;

    }

    public static int findMax(int[] arr)

    {

        if (arr.Length == 0) {

            throw new Exception(“Array is empty”);

        }

        int max = int.MinValue;

        foreach (var i in arr) {

            if (i > max) {

                max = i;

            }

        }

        return max;

    }

    public static void Main()

    {

        int[] arr = { 8, 3, 5, 1, 2 };

        Console.WriteLine(“Minimum number is “ + findMin(arr));

        Console.WriteLine(“Maximum number is “ + findMax(arr));

    }

}

Скачать  Выполнить код

результат:

Minimum number is -1
Maximum number is 8

Вот и все, что касается нахождения минимального и максимального числа из массива в C#.

Спасибо за чтение.

Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.

Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования 🙂

I wrote bellow to compare what i said by @Marc Gravell, the way I told is a little faster in my PC, and the linq one is slowest way, Also if you change the position of functions (in code) you will always gain a better performance with a version with if

    static void Main(string[] args)
    {
        Dictionary<string, List<long>> dic = new Dictionary<string, List<long>>();

        dic["First"] = new List<long>();
        dic["Second"] = new List<long>();
        dic["Third"] = new List<long>();


        for (int i = 0; i < 500; i++)
        {
            int[] array = GetRandomArray();
            Stopwatch stopWacth = new Stopwatch();
            stopWacth.Restart();
            int n1 = FindMin(array);
            stopWacth.Stop();
            long firstTicks = stopWacth.ElapsedTicks;
            dic["First"].Add(firstTicks);

            stopWacth.Restart();
            int n2 = AnotherFindMin(array);
            stopWacth.Stop();
            long secondTick = stopWacth.ElapsedTicks;
            dic["Second"].Add(secondTick);

            stopWacth.Restart();
            int n3 = array.Min();
            stopWacth.Stop();
            long thirdTick = stopWacth.ElapsedTicks;
            dic["Third"].Add(thirdTick);

            Console.WriteLine("first tick : {0}, second tick {1}, third tick {2} ", firstTicks, secondTick, thirdTick);
        }

        Console.WriteLine("first tick : {0}, second tick {1}, third tick {2} ", dic["First"].Average(), dic["Second"].Average(), dic["Third"].Average());

        Console.ReadLine();
    }


    public static int[] GetRandomArray()
    {
        int[] retVal = new int[1000000];
        Random r = new Random();
        for (int i = 0; i < 1000000; i++)
        {
            retVal[i] = r.Next(1000000000);
        }
        return retVal;
    }

    public static int FindMin(int[] arr)
    {
        switch (arr.Length)
        {
            case 0: throw new InvalidOperationException();
            case 1: return arr[0];
            case 2: return Math.Min(arr[0], arr[1]);
            default:
                int min = arr[0];
                for (int i = 1; i < arr.Length; i++)
                {
                    if (arr[i] < min) min = arr[i];
                }
                return min;
        }
    }

    public static int AnotherFindMin(int[] arr)
    {
        if (arr.Length > 0)
        {
            int min = arr[0];
            for (int i = 1; i < arr.Length; i++)
            {
                if (arr[i] < min) min = arr[i];
            }
            return min;
        }
        else
        {
            throw new InvalidOperationException();
        }
    }
}
// revised test by Marc (see comments discussion)
static class Test {
    static void Main(string[] args)
    {
        Dictionary<string, List<long>> dic = new Dictionary<string, List<long>>();

        dic["First"] = new List<long>();
        dic["Second"] = new List<long>();
        dic["Third"] = new List<long>();

        const int OUTER_LOOP = 500, INNER_LOOP = 500000;
        for (int arrSize = 1; arrSize <= 3; arrSize++)
        {
            for (int i = 0; i < OUTER_LOOP; i++)
            {
                int[] array = GetRandomArray(arrSize);
                Stopwatch stopWacth = Stopwatch.StartNew();
                for (int j = 0; j < INNER_LOOP; j++)
                {
                    int n1 = FindMin(array);
                }
                stopWacth.Stop();
                long firstTicks = stopWacth.ElapsedTicks;
                dic["First"].Add(firstTicks);

                stopWacth = Stopwatch.StartNew();
                for (int j = 0; j < INNER_LOOP; j++)
                {
                    int n2 = AnotherFindMin(array);
                }
                stopWacth.Stop();
                long secondTick = stopWacth.ElapsedTicks;
                dic["Second"].Add(secondTick);

                stopWacth = Stopwatch.StartNew();
                for (int j = 0; j < INNER_LOOP; j++)
                {
                    int n3 = array.Min();
                }
                stopWacth.Stop();
                long thirdTick = stopWacth.ElapsedTicks;
                dic["Third"].Add(thirdTick);

                //Console.WriteLine("{3}: switch : {0}, 0-check {1}, Enumerable.Min {2} ", firstTicks, secondTick, thirdTick, arrSize);
            }

            Console.WriteLine("{3}: switch : {0}, 0-check {1}, Enumerable.Min {2} ", dic["First"].Average(), dic["Second"].Average(), dic["Third"].Average(), arrSize);
        }
        Console.WriteLine("Done");
        Console.ReadLine();
    }


    public static int[] GetRandomArray(int size)
    {
        int[] retVal = new int[size];
        Random r = new Random();
        for (int i = 0; i < retVal.Length; i++)
        {
            retVal[i] = r.Next(1000000000);
        }
        return retVal;
    }

    public static int FindMin(int[] arr)
    {
        switch (arr.Length)
        {
            case 0: throw new InvalidOperationException();
            case 1: return arr[0];
            case 2: return arr[0] < arr[1] ? arr[0] : arr[1];
            default:
                int min = arr[0];
                for (int i = 1; i < arr.Length; i++)
                {
                    if (arr[i] < min) min = arr[i];
                }
                return min;
        }
    }

    public static int AnotherFindMin(int[] arr)
    {
        if (arr.Length > 0)
        {
            int min = arr[0];
            for (int i = 1; i < arr.Length; i++)
            {
                if (arr[i] < min) min = arr[i];
            }
            return min;
        }
        else
        {
            throw new InvalidOperationException();
        }
    }
}

2 / 2 / 0

Регистрация: 07.04.2016

Сообщений: 34

1

Найти минимальный и максимальный элемент массива

30.04.2016, 15:28. Показов 59344. Ответов 5


Студворк — интернет-сервис помощи студентам

Как найти максимальный и минимальный элемент ,создав массив чисел. А главное как расписать в си шарпе?



0



Dark Byte

30 / 47 / 19

Регистрация: 23.10.2014

Сообщений: 1,001

30.04.2016, 15:33

2

C#
1
2
3
var a = new[] { 0, 1, 2, 3 };
var min = a.Min();
var max = a.Max();



0



sergeevdokimov

2 / 2 / 0

Регистрация: 07.04.2016

Сообщений: 34

30.04.2016, 16:30

 [ТС]

3

Программа написана, но почему-то не работает правильно. В чём проблема?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace massiv
{
    class Program
    {
        static void Main(string[] args)
        {
 
            int i, n = 3;
            double[] a = new double[n];
            for (i = 0; i < n; i++)
            {
                Console.Write("Введите элемент массива: ");
                a[i] = Convert.ToDouble(Console.ReadLine());
            }
 
            double min = a[0];
            for (i = 1; i < n; i++)
            {
                if (min > a[i])
                    min = a[i];
            }
            Console.WriteLine("min = {0}", min);
 
            double max = a[0];
            for (i = 1; i < n; i++)
            {
                if (a[i] < 5 && a[i] > max)
                    max = a[i];
            }
            Console.WriteLine("max = {0}", max);
        }
    }
}



1



10 / 10 / 15

Регистрация: 29.11.2015

Сообщений: 43

30.04.2016, 17:23

4

зачем в цикле нахождения max в условии стоит “a[i] < 5” ?



0



2 / 2 / 0

Регистрация: 07.04.2016

Сообщений: 34

30.04.2016, 18:05

 [ТС]

5

даже если поставлю “n” заместь “5”, всё равно не правильно работаёт!



0



Dragon6

5 / 5 / 4

Регистрация: 10.02.2011

Сообщений: 48

01.05.2016, 00:20

6

Там не должно быть такого условия (“a[i] < что-либо”), ведь что делает цикл нахождения max (да и min, в принципе, тоже):
– Такс, предположим, что a[0] (первый элемент массива) – это максимальное число во всем массиве
– Смотрим остальные элементы массива
– Так, этот элемент больше чем наш предпологаемый максимум?
– Если он больше: Ага, он больше – теперь его примем за максимум
– Если не больше: Ну и фиг с ним
Следовательно условие должно быть просто:

C#
1
if( a[i] > max )

ну или:

C#
1
if( max < a[i] )

На личное усмотрение



1



I get three values from three variables. How can i check who is the highest number and who is the lowest number?

The numbers are represented like this:

private int _score1; 
private int _score2; 
private int _score2; 

Code:

Public int Highest
{
  return the highest number here;
}

public int Lowest
{
  return the lowest number here;
}

Can i calculate the highest and the lowest number in my constructor?

Paul Sasik's user avatar

Paul Sasik

78.9k20 gold badges149 silver badges188 bronze badges

asked Dec 8, 2010 at 18:08

Tomten's user avatar

8

The obligatory Linq answer:

Public int Highest(params int[] inputs)
{
  return inputs.Max();
}

public int Lowest(params int[] inputs)
{
  return inputs.Min();
}

The beauty of this one is that it can take any number of integer inputs. To make it fail-safe you should check for a null/empty inputs array (meaning nothing was passed into the method).

To do this without Linq, you basically just have to mimic the logic performed by the extension method:

Public int Lowest(params int[] inputs)
{
   int lowest = inputs[0];
   foreach(var input in inputs)
      if(input < lowest) lowest = input;
   return lowest;
}

Again, to make it foolproof you should check for an empty or null inputs array, because calling Lowest() will throw an ArrayIndexOutOfBoundsException.

answered Dec 8, 2010 at 18:13

KeithS's user avatar

KeithSKeithS

69.8k21 gold badges111 silver badges164 bronze badges

4

This is one way to do it:

public int Highest
{
    get { return Math.Max(_score1, Math.Max(_score2, _score3)); }
}

public int Lowest
{
    get { return Math.Min(_score1, Math.Min(_score2, _score3)); }
}

answered Dec 8, 2010 at 18:12

cdhowie's user avatar

cdhowiecdhowie

156k24 gold badges285 silver badges299 bronze badges

0

int[] numbers = new[] { _score1, _score2, _score3 };
int min = numbers.Min();
int max = numbers.Max();

answered Dec 8, 2010 at 18:15

Hank's user avatar

HankHank

8,21912 gold badges47 silver badges57 bronze badges

4

Highest
return (x > y) ? (x > z ? x : z) : (y > z ? y : z)

Lowest
return (x < y) ? (x < z ? x : z) : (y < z ? y : z)

answered Dec 8, 2010 at 18:12

Russell Steen's user avatar

Russell SteenRussell Steen

6,4646 gold badges37 silver badges56 bronze badges

1

Here’s something you could do:

public class Numbers
{
    private int _number1;
    private int _number2;
    private int _number3;

    public readonly int Highest;
    public readonly int Lowest;

    public Numbers(int num1, int num2, int num3)
    {
        int high;
        int low;

        _number1 = num1;
        _number2 = num2;
        _number3 = num3;

        high = num1 > num2 ? num1 : num2;
        high = high > num3 ? high : num3;

        low = num1 < num2 ? num1 : num2;
        low = low < num3 ? low : num3;

        Highest = high;
        Lowest = low;
    }
}

answered Dec 8, 2010 at 18:17

Jeff LaFay's user avatar

Jeff LaFayJeff LaFay

12.8k13 gold badges71 silver badges100 bronze badges

If you want to simply check which is the highest you can do this

private int _highest = _score1;  
if (_score2 > _highest)  
  _highest = _score2  
if (_score3 > _highest)  
  _highest = _score3

Similarly, you can find the lowest like so

private int _lowest = _score1;  
if (_score2 < _lowest)  
  _lowest = _score2  
if (_score3 < _lowest)  
  _lowest = _score3

answered Dec 8, 2010 at 18:13

alexcoco's user avatar

alexcocoalexcoco

6,6576 gold badges26 silver badges39 bronze badges

Using LINQ-to-Objects, you could do something like this.

var numbers = new [] {_score1, _score2, _score3};
numbers.Sort();
var lowest = numbers.First();
var highest = numbers.Last();

answered Dec 8, 2010 at 18:11

James Kovacs's user avatar

James KovacsJames Kovacs

11.5k40 silver badges44 bronze badges

3

For a reference: in some cases you’ll be having more than three variables (possibly not knowing how many). If they are stored in an array, here’s the way to do it:

int Highest(int[] numbers)
{
    int highest = Int32.MinValue();

    for (int i = 0; i < numbers.Length; i++)
    {
        if (numbers[i] > highest)
            highest = numbers[i];
    }

    return highest;
}

int Lowest(int[] numbers)
{
    int lowest = Int32.MaxValue();

    for (int i = 0; i < numbers.Length; i++)
    {
        if (numbers[i] < lowest)
            lowest = numbers[i];
    }

    return lowest;
}

This will work for any length of int array.

answered Dec 8, 2010 at 18:20

Nikola Malešević's user avatar

Nikola MaleševićNikola Malešević

1,7296 gold badges21 silver badges43 bronze badges

Find the Largest and smallest number

using System;

namespace LargeSmall;

{
    class Program
    {
        public static void Main()
        {

            float large, small;
            int[] a = new int[50];
            Console.WriteLine("Enter the size of Array");
            int max = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("Enter the array elements");
            for (int i = 0; i < max; i++)
            {
                string s1 = Console.ReadLine();
                a[i] = Int32.Parse(s1);
            }
            Console.Write("");
            large = a[0];
            small = a[0];
            for (int i = 1; i < max; i++)
            {
                if (a[i] > large)
                    large = a[i];
                else if (a[i] < small)
                    small = a[i];
            }
            Console.WriteLine("Largest element in the array is {0}", large);
            Console.WriteLine("Smallest element in the array is {0}", small);
        }
    }

Kevin L's user avatar

Kevin L

1,0663 gold badges12 silver badges21 bronze badges

answered Aug 21, 2014 at 1:55

Neethu.K's user avatar

Here is simple logic for finding Smallest Number

Input : 11, 0 , 3, 33 Output : “0”

namespace PurushLogics
{
    class Purush_SmallestNumber
    {
        static void Main()
        {
            int count = 0;
            Console.WriteLine("Enter Total Number of Integersn");
            count = int.Parse(Console.ReadLine());

            int[] numbers = new int[count];

            Console.WriteLine("Enter the numbers"); // Input 44, 55, 111, 2 Output = "2"
            for (int temp = 0; temp < count; temp++)
            {
                numbers[temp] = int.Parse(Console.ReadLine());
            }

            int smallest = numbers[0];
            for (int small = 1; small < numbers.Length; small++)
            {
                if (smallest > numbers[small])
                {
                    smallest = numbers[small];
                }
            }
            Console.WriteLine("Smallest Number is : "{0}"",smallest);
            Console.ReadKey();
        }
    }
}

answered Feb 15, 2018 at 8:02

Purushoth's user avatar

Встречаю часто вопросы у студентов по поиску минимального значения в массиве, решил привести различные вариации поиска в разных массивах.

Поиск минимального значения в одномерном массиве с помощью Linq.

  static void Main(string[] args)

        {

            int[] num = { 2, 5, 6, 3, 7, 9, 1 };

            //Одномерный

            Console.WriteLine(num.Min());

            Console.ReadKey();

        }

Поиск максимального значения в одномерном массиве с помощью Linq.

static void Main(string[] args)

        {

                int[] num = { 2, 5, 6, 3, 7, 9, 1 }; //Одномерный

                Console.WriteLine(num.Max());

                Console.ReadKey();

        }

Поиск минимального значения в одномерном массиве с помощью цикла методом перебора.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

     static void Main(string[] args)

        {

            int[] num = { 2, 5, 6, 3, 7, 9, 1 };

            //Одномерный

            int tmpMin = int.MaxValue;

            for (int i = 0; i < num.Length; i++)

            {

                if (tmpMin > num[i])

                {

                    tmpMin = num[i];

                }

            }

            Console.WriteLine(tmpMin);

            Console.ReadKey();

        }

Поиск максимального значения в одномерном массиве с помощью цикла методом перебора.

    static void Main(string[] args)

        {

            int[] num = { 2, 5, 6, 3, 7, 9, 1 }; //Одномерный

            int tmpMax = int.MinValue;

            for (int i = 0; i < num.Length; i++)

            {

                if (tmpMax < num[i])

                {

                    tmpMax = num[i];

                }

            }

            Console.WriteLine(tmpMax);

            Console.ReadKey();

        }

Поиск минимального значения в многомерном массиве, с помощью Linq

Многомерный массив, в отличие от одномерного массива, не позволяет нам напрямую обратиться к методу Min. Но, это можно легко исправить, если воспользоваться методом Cast<T>, с помощью которого можно преобразовать многомерный массив в обобщенную коллекцию типа IEnumerable<T>. После чего нам станет доступен метод Min, и мы сможем найти минимальное значение массива, например:

        static void Main(string[] args)

        {

            int[,] numbers = { { 100, 20, 63, 39, 428, 118 }, { 22, 34, 63, 59, 68, 26 } };

            IEnumerable<int> colNumbs = numbers.Cast<int>();

            int minValue = colNumbs.Min();

            Console.WriteLine(minValue);

            Console.ReadKey();

        }

Поиск максимального значения в многомерном массиве, с помощью Linq

Поиск минимального значения в массив массивов, или зубчатом массиве.

   static void Main(string[] args)

        {

            int[,] numbers = { { 100, 20, 63, 39, 428, 118 }, { 22, 34, 63, 59, 68, 26 } };

            IEnumerable<int> colNumbs = numbers.Cast<int>();

            int maxValue = colNumbs.Max();

            Console.WriteLine(maxValue);

            Console.ReadKey();

        }

Чтобы найти минимальное значение в Jagged массиве, необходимо преобразовать содержимое массива в объект типа IEnumerable<T>. , но только выполнить эту операцию нужно не с помощью метода Cast, а например, с помощью метода SelectMany:

  static void Main(string[] args)

        {

            int[][] numbers = { new int [] {12,123,35,75,33}, new int [] {44,42,64,96}, new int [] {121,42,733,45}};

            int minValue = numbers.SelectMany(x => x).Min();

            Console.WriteLine(minValue);

            Console.ReadKey();

        }

Поиск максимального значения в массив массивов, или зубчатом массиве.

   static void Main(string[] args)

        {

            int[][] numbers = { new int[] { 12, 123, 35, 75, 33 }, new int[] { 44, 42, 64, 96 }, new int[] { 121, 42, 733, 45 } };

            int maxValue = numbers.SelectMany(x => x).Max();

            Console.WriteLine(maxValue);

            Console.ReadKey();

        }

Добавить комментарий