#include#includeview code#include
#define n 1000
using
namespace
std;
intcount1,count2,count3;
//演算法1,2來自程式設計珠璣
void minmax(vectora)
if(a[i]>max)
count1 += 2
; }
cout
<
min,max=
"}void minmax2(vectora)
else
count2 += 2
; }
}cout
<
min,max=
"}void minmax3(vector a)
else
for(;k2
)
if(a[k+1]>max)
}else
if(a[k]>max)
}count3 += 3
; }
cout
<
min,max=
"}int
main()
for(int i=0;i)
//clock_t st,fi,st2,fi2,st3,fi3;
//st = clock();
minmax(a);
//fi = clock();
cout<
minmax比較次數 :
"cout
<
//st2 = clock();
minmax2(a);
//fi2 = clock();
cout<
minmax2比較次數
"cout
<
//st3 = clock();
minmax3(a);
//fi3 = clock();
cout<
minmax3比較次數
"return0;
}
演算法1,2來自《程式設計珠璣續》第一章第一題,2是對1的優化,因為如果a[i]n-1,其中hn=1+1/2+1/3+..+1/n,即為第n個調和數.對於n=1000,其期望值為6.485.
演算法3來自《演算法導論》,思路如下:
1. pick 2 elements(a, b), compare them. (say a >b)比較次數為3n/2證明如下:2. update min by comparing (min, b)
3. update max by comparing (max, a)
this way you would do程式執行結果:(n=1000)3 comparisons for
2 elements, amounting to 3n/2 total comparisons for n elements.
雖然比較次數有區別,但當n較大(n=1000000)時,三個演算法的實際執行時間並無太大差別.當n更大(n=100000000)時,可以明顯看出演算法3最慢,演算法2最快,演算法1次之.
華為機試 最小最大數之和
輸入整型陣列求陣列的最小數和最大數之和,例如輸入1,2,3,4則輸出為5,當輸入只有乙個數的時候,則最小數和最大數都是該數,例如只輸入1,則輸出為2 另外陣列的長度不超過50 include include include using namespace std int main int len c...
求最大數與最小數乘積
include using namespace std intmain 初始化,將陣列中全賦值為0 for i 0 i 5 i cin a i 輸入5個數到陣列中 max min a 0 將最大最小值先確定為第乙個數 for i 1 i 5 i 順序開始找後面的四個數,如果比現在確定的最小值更小,或...
尋找最大數
描述 請在整數 n 中刪除m個數字,使得餘下的數字按原次序組成的新數最大,比如當n 92081346718538,m 10時,則新的最大數是9888 輸入 第一行輸入乙個正整數t,表示有t組測試資料 每組測試資料佔一行,每行有兩個數n,m n可能是乙個很大的整數,但其位數不超過100位,並且保證資料...