本文将解决三个问题:
input:A[1……n] 包含n个数字
output:
- A的最大值max
- A的最大值max和最小值min
- A的最大值max和第二大值
要求:比较的次数尽可能少
1.最大元素
如果使用排序的话,常见排序中比较快的有快速排序O(nlogn)。但是显然做一个线性遍历更加快。linear scan的时间复杂度为O(n) 。
max = A[1];
for i=2 to n
if max < A[i]
max = A[i];
return max
2.最大元素和最小元素
值得注意的是这里要求的是比较次数尽可能少,如果做两次linear scan的话是需要2n次比较的,如果使用下面这种方法的话可以将比较次数降低至3/2n。