找出最大值和最小值
(算法导论第三版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-1max = array[0];min = array[0];start_index = 1;}else{//奇数 1 次比较 剩余元素n-2if(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
}