Найти значение 3-го по величине элемента - C#

Формулировка задачи:

Помогите, пожалуйста!!! Нужен код C#. Объявить массив целых чисел и заполнить его случайными значениями. Размер массива 200,диапазон значений 0-100. При выполнении следует иметь в виду следующее: 1)0 считается положительным числом, если в задании не оговорен какой-то другой его статус; 2)Когда речь идет о какой-то последовательности чисел, имеется в виду последовательность с длиной, большей 1; 3)В тех случаях, когда задание требует выполнения каких-то вычислений, разрешается выполнять их с той точностью, которую обеспечивают операции целочисленной арифметики. Что нужно сделать? Найти значение 3-го по величине элемента и значения всех элементов массива, которые его превышают, заменить на найденное значение.

Код к задаче: «Найти значение 3-го по величине элемента - C#»

textual
        //помещает в N-ю позицию последовательности элемент, который мог бы быть в этой позиции, 
        //если бы последовательность была отсортирована.
        public static void NthElement(T[] a, int n)
        {
            NthElement(a, n, 0, a.Length - 1);
        }
 
        private static void NthElement(T[] a, int n, int l, int r)
        {
            while (l < r)
            {
                int i = Partition(a, l, r);
                if (n <= i)
                    r = i - 1;
                if (n >= i)
                    l = i + 1;
            }
        }
 
       private static int Partition(T[] a, int l, int r)
        {
            int m = l + ((r - l) >> 1);
            Swap(ref a[m], ref a[r - 1]);
            Med3(a, l, r - 1, r);
            int i = l - 1;
            int j = r;
            T v = a[r - 1];
            do
            {
                while (a[++i].CompareTo(v) < 0) ;
                while (v.CompareTo(a[--j]) < 0) ;
                if (i >= j) break;
                Swap(ref a[i], ref a[j]);
            } while (true);
            Swap(ref a[r-1], ref a[i]);
            return i;
        }
 
 private static void Swap(ref T a, ref T b)
        {
            T t = a;
            a = b;
            b = t;
        }
 
        private static void CompareSwap(T[] keys, int a, int b)
        {
            if ((a != b) && (keys[a].CompareTo(keys[b])) > 0)
            {
                T t = keys[a];
                keys[a] = keys[b];
                keys[b] = t;
            }
        }
 
        private static void Med3(T[] a, int l, int m, int r)
        {
            CompareSwap(a, l, m);
            CompareSwap(a, l, r);
            CompareSwap(a, m, r);
        }

10   голосов, оценка 4.300 из 5


СОХРАНИТЬ ССЫЛКУ