Главная
>>
Каталог задач
>>
Математика
>>
Вычисление минимального / максимального значения
Aвтор:
this
Дата:
18.01.2006
Просмотров: 75890
реализации(C#: 4шт...)
+добавить
В массиве
Вряд ли найдется программист, кто не знает или не сможет написать эти алгоритмы. Куда ж проще?
minIndex = 0
min = a[minIndex]
for i = 1 to n-1
if a[i] < min
minIndex = i
min = a[minIndex]
maxIndex = 0
max = a[maxIndex]
for i = 1 to n-1
if a[i] > max
maxIndex = i
max = a[maxIndex]
Интересен подход Р.Г. Дроми для нахождения максимального элемента с использованием маркеров:
i = 0
while i < n
max = x[i]
x[n] = max
i++
while x[i] < max
i++
Обратите внимание на то, что в алгоритме инициируется дополнительный элемент массива - a[n](т.н. маркер). А также на тот факт, что максимум ищется без использования оператора if!
Алгоритм соответственно минимума в этом случае будет иметь только одно отличие: знак меньше("<") меняется на больше(">") строке 6.
Реализации:
C#(4)
+добавить
1)
Минимальное значение массива на C#, code #90[автор:this]
static float Min(float[] a)
{
int minIndex = 0;
float min = a[minIndex];
for (int i = 1; i < a.Length; i++)
{
if (a[i] < min)
{
minIndex = i;
min = a[minIndex];
}
}
return min;
}
2)
Максимальное значение массива на C#, code #91[автор:this]
static float Max(float[] a)
{
int maxIndex = 0;
float max = a[maxIndex];
for (int i = 1; i < a.Length; i++) {
if (a[i] > max)
{
maxIndex = i;
max = a[maxIndex];
}
}
return max;
}
3)
Максимальное значение массива с помощью маркера на C#, code #92[автор:this]
static float MarkerMax(float[] a)
{
int i = 0, n = a.Length;
float max = a[0];
/* Меняем размер массива, чтобы добавить
* в конец элемент a[n], который будет являться
* маркером
*/
Array.Resize(ref a, n+1);
while (i < n)
{
max = a[i];
a[n] = max;
i++;
while (a[i] < max) i++;
}
return max;
}
4)
Минимальное значение массива с помощью маркера на C#, code #93[автор:this]
static float MarkerMin(float[] a)
{
int i = 0, n = a.Length;
float min = a[0];
/* Меняем размер массива, чтобы добавить
* в конец элемент a[n], который будет являться
* маркером
*/
Array.Resize(ref a, n + 1);
while (i < n)
{
min = a[i];
a[n] = min;
i++;
while (a[i] > min) i++;
}
return min;
}