1. 程式人生 > >給定陣列a[0:n-1]試設計一個演算法,在最壞情況下用[3n/2 -2 ] 次比較找出a[0:n-1]中元素的最大值和最小值;教材2-15

給定陣列a[0:n-1]試設計一個演算法,在最壞情況下用[3n/2 -2 ] 次比較找出a[0:n-1]中元素的最大值和最小值;教材2-15

給定陣列a[0:n-1]試設計一個演算法,在最壞情況下用[3n/2 -2 ] 次比較找出a[0:n-1]中元素的最大值和最小值;

解:要求對於陣列用小於【3n/2-2】的比較次數找到兩個最值

可以用陣列第一個元素來初始化max,min

然後遍歷陣列,分別和max,min比較,一遍就可以找出

int a[n];
cin>>n
int max,min;
max=min=a[0]
for(int i=1;i<n;i++)
{
if(a[i]>max) max=a[i];
else if (a[i]<min)
min=a[i];
}
cout<<max<<" "<<min<<endl;

這樣比較次數最壞就是數列遞減排列,需要比較2(n-1)次

最好的情況就是數列遞增排列,需要比較n-1次

平均次數為(3n-3)/2

所以為所求