最小最大數

2022-08-27 08:27:12 字數 1839 閱讀 8504

#include#include

#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;

}

view code

演算法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)

2. update min by comparing (min, b)

3. update max by comparing (max, a)

比較次數為3n/2證明如下:

this way you would do

3 comparisons for

2 elements, amounting to 3n/2 total comparisons for n elements.

程式執行結果:(n=1000)

雖然比較次數有區別,但當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位,並且保證資料...