Как найти среднее значение проигнорировав максимальное и минимальное значение массива?
В один проход:
var nums = new[] { 100, 3, 102, 7, 1, 9, 12 };
 var max = default(int?);
 var min = default(int?);
 var avg = 0.0;
 var avgCount = 0;
 foreach (var number in nums)
 {
     if (min == null)
     {
         min = number;
     }
     else if (max == null)
     {
         max = number;
         if (max < min)
         {
             max = min;
             min = number;
         }
     }
     else if (number < min)
     {
         avg = ((avg * avgCount) + min.Value) / ++avgCount;
         min = number;
     }
     else if (number > max)
     {
         avg = ((avg * avgCount) + max.Value) / ++avgCount;
         max = number;
     }
     else
     {
         avg = ((avg * avgCount) + number) / ++avgCount;
     }
 }
Отсортировать по возрастанию/убыванию и складывать все индексы от 0 до length, не включительно естественно))0)