該演算法為尋找最大值和最小值的優化版,普通的方法需要比較3(n-2)/2次,而優化之後的演算法只需要比較2lgn-n/2次。
思路為:將陣列中元素兩兩比較,大的放到big陣列中,小的放到small陣列中,對big陣列中的數字兩兩比較,去掉小的,保留大的,直到只剩乙個元素為止。該元素即為最大值。
求最小值的思路同最大值。
具體思路見**:
//優化演算法
//第九章例題,以2lgn-n/2的比較次數同時選擇出陣列中最大值和最小值,比較次數比3(n-2)/2少
//演算法思路是每兩個元素進行比較,將所有較小的元素取出放到乙個陣列,最小的元素肯定在這裡面,
//再將這兩個陣列中每兩個元素進行比較,丟棄較大的元素,依次類推直到剩下乙個元素為止,此元素即為最小的元素
//同理,最大元素尋找的方法也是這樣
#includeusing namespace std;
void findminandmax(int a,int length,int &min,int &max)
else
}if(lengthb%2==1)
lengthb=j;
} max=big[0];
}int main()
; int min,max;
findminandmax(a,9,min,max);
cout<
演算法導論第九章例題之尋找最大數和最小數優化版
該演算法為尋找最大值和最小值的優化版,普通的方法需要比較3 n 2 2次,而優化之後的演算法只需要比較2lgn n 2次。思路為 將陣列中元素兩兩比較,大的放到big陣列中,小的放到small陣列中,對big陣列中的數字兩兩比較,去掉小的,保留大的,直到只剩乙個元素為止。該元素即為最大值。求最小值的...
演算法導論 第九章
這章介紹了中位數和順序統計學 中位數即乙個序列中最中間的數字,在快速排序中非常有意義,在其它的一些應用中也很有效,因為可以2分序列,這樣會有更好的效率。這章主要介紹如何不排序來找到序列的順序,由於不需要排序,可以減少很多比較的操作,最終可以獲得一些線性的演算法,得到排名第i的數字。演算法的基礎是首先...
第九章例題
第九章 9 1 uva1025 include include using namespace std const int inf 99999999 bool has train 440 440 2 has train t i b 表示t時刻,在車站i是否有地鐵出發 int t 440 r 440 ...