FindMaxMin 分治求最大最小問題

2021-09-29 22:28:32 字數 903 閱讀 8471

思路:運用分治的思想,將要排序的整個陣列從中間劈開,分別求其左右兩邊的最大最小值,然後將求出的最大最小值合起來進行比較。

當左右兩邊的陣列小到一定程度時:

(1)陣列中只有乙個元素,maxnum=minnum;

(2)陣列中有兩個元素,找出兩個元素中的最大最小值;

6?(3)陣列中大於兩個元素,從中間分開,繼續遞迴;

1.分治

#include

#include

#include

using

namespace std;

int arr[

100]

;void

getmaxmin

(int left,

int right,

int&maxnum,

int&minnum)

else

if(left+

1==right)

else

}int

main()

int maxnum,minnum;

getmaxmin(0

,n-1

,maxnum,minnum)

; cout<<

"最大值是:"

<

" 最小值是:"

<

return0;

}

2.迭代

#include

using

namespace std;

intmain()

cout<

" "<

}

遞迴分治 求集合最大元

在規模為n的資料元素集合中找出最大元。當n 2時,一次比較就可以找出兩個資料元素的最大元和最小元。當n 2時,可以把n個資料元素分為大致相等的兩半,一半有n 2個資料元素,而另一半有n 2個資料元素。先分別找出各自組中的最大元,然後將兩個最大元進行比較,就可得n個元素的最大元。include usi...

分治法求最大子串

最近在學分治法,涉及到很多問題都能用分治法解決,漢諾塔,快排,歸併排序等,下面是解決最大字串問題。1,用分治法解決,下面還介紹不用分治解決的另一種方法。include 分治法 int countstring int a,int start,int end void main int v counts...

分治策略 求最大子陣列

只有當陣列中包含負數時,最大子陣列問題才有意義。如果所有元素都是非負的,最大子陣列問題沒有任何意義,因為整個陣列和肯定是最大的 1 public class findmaxsubarraydemo 4int result arr findmaximumsubarray arr,0,arr.lengt...