求陣列的最大最小值,可以遍歷一遍陣列,然後分別記錄最大值和最小值,這種方法需要的比較次數為2n次。如果想要減少比較次數,可以採用的方法是遍歷陣列,然後比較相鄰元素,把相鄰元素的較大值放在後面,較小的放在前面。在從較大值中選取最大值即為整個陣列的最大值,從較小值中選取最小值即為整個陣列的最小值。這時,需要的比較次數為1.5*n次。
void findmaxmin(int a,int n)
for(i=0;imaxe)
maxe=a[i];
if(a[i]maxe)
maxe=a[i+1];
} cout<
也可以使用分治的方法,先在左半數組求出最大值和最小值,再求右半陣列的最大值和最小值,比較兩個最大值即可求出整個陣列的最大值,比較兩個最小值即可求出整個陣列的最小值。設比較次數為f(n),有f(2)=1;f(n)=2*f(n/2)+2;
可以求出需要的比較次數是1.5*n-2,比較的次數沒有減少。
struct res
;res findmaxmin2(int a,int start,int end)
{
res r;
if(start>=end-1)
{ if(a[start]right.max?left.max:right.max;
r.min=left.min
求陣列的最大值最小值
演算法陣列中的最大值和最小值 方法1 遍歷兩次求出最大值最小值 時間複雜度n 2 方法2 相鄰兩個數分為一組比較,大的放在偶數字,小的放到奇數字,然後在偶數字上找到最大值,在奇數字上找到最小值n 1.5 方法3 定義兩個變數max,min值,相鄰兩個數分為一組,比較出最大值和最小值,最大值和max比...
求陣列中的最大值和最小值
方法1 暴力方法 遍歷一遍陣列,比較2 n次求出最大值和最小值 方法2 改進方法 破壞了原陣列 遍歷一遍陣列使得下標為偶數的元素較下標為奇數的元素大,再分別求出最大值和最小值 比較次數為3 n 2次 方法3 改進方法 不破壞原陣列 遍歷一遍陣列將相鄰元素中較大值和nmax比較,將較小值和nmin比較...
求陣列的最大值與最小值
方法1 通過迴圈查詢陣列的最大值和最小值 minn a 0 maxx a 0 for int j 0 j i j 方法2 利用c 自帶的函式 max element 和 min element include include using namespace std intmain cout max ...