找出最大值和最小值
(算法导论第三版9.1-2)
在最坏的情况下,比较次数下界是⌈3n/2⌉−2
void find_maximum_and_minimum_element(int *array,int length,int &max,int &min){
int remainder = length % 2;
int start_index = 0;
if(remainder)
{
//奇数 0次比较 剩余元素n-1
max = array[0];
min = array[0];
start_index = 1;
}
else
{
//奇数 1 次比较 剩余元素n-2
if(array[0]<array[1])
{
max = array[1];
min = array[0];
}
else
{
max = array[0];
min = array[1];
}
start_index = 2;
}
int current_max,current_min;
//奇数 (n-1)*3/2次比较
//偶数 (n-2)*3/2次比较
for (int i = start_index; i < length; i+=2) {
if(array[start_index]<array[start_index+1])
{
current_max = array[i + 1];
current_min = array[i];
}
else
{
current_max = array[i];
current_min = array[i + 1];
}
if(current_max>max)
{
max = current_max;
}
if(current_min<min)
{
min = current_min;
}
}
//共计
//奇数(n-1)*3/2
//偶数 (n-2)*3/2 + 1
}