Я уже подумывал об этом домашнем задании. Учитывая числовой массив размером n, создайте алгоритм, который будет находить высокие и низкие значения с максимальным сравнением 1.5n.
Моя первая попытка была
int high=0
int low= Number.MaxValue //problem statement is unclear on what type of number to use
Number numList[0 . . n] //number array, assuming unsorted
for (i=0, i < n, i++) {
if (numList[i] > high)
high = numList[i]
else if (numList[i] < low)
low = numList[i]
}
Моя проблема заключается в том, что каждая итерация цикла имеет одну из трех возможностей:
- найдено низкое значение - сделано 1 сравнение.
- найдено высокое значение - сделано 2 сравнения.
- не найдено - сделано 2 сравнения.
Таким образом, для всего обхода массива можно сделать максимум 2n сравнений, что далеко от максимальной потребности в 1,5,1 сравнениях.