Вторым по величине элементом большого массива


Дан массив, который содержит целые числа (может содержать тысячи элементов), вы должны написать программу, чтобы найти второй по величине элемент группы.

int secondmax(int array[],int n)
{
 int max;
 int secondmax;
 assert(n>1);
 max=array[0]>array[1] ? array[0] : array[1];
 secondmax=array[0]>array[1] ? array[1] : array[0];
 for(j=2;j<n;j++)
 {
  if(array[j]> max) { secondmax=max;max=array[j];}
  else if (array[j] > secondmax) { secondmax=array[j];}
 }
 return secondmax;
}
  • Это правильный код?

  • Это использование утверждать, хорошо или следует ли ее избегать?



403
2
задан 29 мая 2011 в 01:05 Источник Поделиться
Комментарии
1 ответ

Там нет необходимости, чтобы проверить, если массив[0] > массив[1] в два раза.

if (array[0] > array[1]) {
max = array[0];
secondmax = array[1];
} else {
secondmax = array[0];
max = array[1];
}

Но если вы действительно хотите использовать тернарный оператор здесь (? :), по крайней мере, переместить их в декларации, и двигаться утверждение выше.

Это микро-оптимизации, но я бы присвоить массив[J], чтобы получить временную переменную внутри цикла, так как это может потенциально быть доступны в четыре раза. Плюс это более читабельным

for(j=2;j<n;j++)
{
int candidate = array[j];
if (candidate > max) {
secondmax = max;
max = candidate;
}
else if (candidate > secondmax) {
secondmax = candidate;
}
}

Надо сказать, что я не большой поклонник единого пространства для отступа или положить несколько инструкций на одной строке. Я работал на компанию, где мы использовали два раньше, и это сбивало с толку. Один напрашивается на неприятности. И с 24+ дюймовых мониторов общем, не нужно быть таким скромным с вертикального экрана недвижимости! :)

Утверждение, кажется, хороший выбор, хотя вы могли бы рассмотреть вместо возврата сигнального значения. Это действительно зависит от того, что абоненты будут ожидать, и убедитесь, что Вы документ на ваш выбор.

6
ответ дан 29 мая 2011 в 07:05 Источник Поделиться