2 10 尋找陣列中的最大值與最小值

2022-06-07 01:42:11 字數 1937 閱讀 7613

// 2.10 尋找陣列中的最大值與最小值

class test;

print(arr);

findmaxmin(arr);

} public static void print(int arr)

// 時間複雜度$o(n)$,但是經過了2n次的比較,本題的目的是儘量減少比較次數

public static void findmaxmin(int arr)

system.out.println("max value: "+arr[maxindex]);

system.out.println("min value: "+arr[minindex]);

} /**

一般情況下,最大的數和最小的數不會是同乙個數。我們先把資料分成兩個部分,再從這兩部分中分別找出最大的數與最小的數

第一輪排序經過了0.5n次比較

在偶數字置找到最大的值經過了0.5n次比較

在奇數字置找到最小的值經過了0.5n次比較

總共的比較次數0.5n+0.5n+0.5n = 1.5n

*/ public static void findmaxmin2(int arr)

// 從偶數字找最大的值

int max = integer.min_value;

for(int i = 0;iarr[i+1])

else

} system.out.println("max value: "+max);

system.out.println("min value: "+min);

} /**

分治演算法

$$f(n) = 2*f(n/2) + 2 = .....= 1.5n-2$$

所以說採用分治演算法,總的比較次數仍然沒有減少

*/ public static void findmaxmin4(int arr)

// return int[max,min]

public static int search(int arr,int start,int end);

else return new int;

} int l = search(arr,start,start+(end-start)/2);

int r = search(arr,start+(end-start)/2+1,end);

int max = l[0]>r[0]?l[0]:r[0];

int min = l[1]分治:對於分治而言,最終比較的次數依然是1.5n次

// 2.10 尋找陣列中的第二大的值

class test;

findsecondmax(arr);

print(arr);

} /**

拓展問題:如果需要找出n個數的陣列中的第二大的數呢?需要比較多少次呢?是否可以使用類似的分治思想來降低比較的次數呢?

answer:基本思路是一樣的

對於分治而言,最終比較的次數依然是1.5n次

*/ public static void findsecondmax(int arr)

// return int[max,secondmax]

public static int search2(int arr,int start,int end);

else return new int;

} int l = search2(arr,start,start+(end-start)/2);

int r = search2(arr,start+(end-start)/2+1,end);

int max = l[0]>r[0]?l[0]:r[0];

int secondmax = l[0] > r[0]?(r[0]>l[1]?r[0]:l[1]):(l[0]>r[1]?l[0]:r[1]);

return new int;

}}

程式設計之美2 10 尋找陣列中的最大值和最小值

這個問題事實上非常easy解決。就是迴圈遍歷一遍陣列,然後找到陣列中存在的最大值和最小值就能夠了,書中主要討論的問題是比較次數較小的方法。只是。書中已經證明了,不管用什麼方法最少的比較次數也就是迴圈遍歷一遍的比較,結果是o 1.5n 的。所以。非常easy的能夠解決問題。第一種方法 函式宣告 voi...

尋找陣列中的最大值和最小值

問題描述 給出乙個陣列,包含n個整數,那麼需要比較多少次找到最大值和最小值 注意 要想得到最大值和最小值,遍歷一遍陣列是不可避免的。我們能減少的就是減少比較次數來提高效率 方法一 遍歷一遍陣列,同時得到最大值和最小值 具體是,定義乙個max 和 min,每遍歷乙個數,就分別和max 和 min比較一...

尋找陣列中的最大值最小值問題

問題描述 給出乙個陣列,包含n個整數,那麼需要比較多少次找到最大值和最小值 注意 要想得到最大值和最小值,遍歷一遍陣列是不可避免的。我們能減少的就是減少比較次數來提高效率 方法一 遍歷一遍陣列,同時得到最大值和最小值 具體是,定義乙個max 和 min,每遍歷乙個數,就分別和max 和 min比較一...