思路:運用分治的思想,將要排序的整個陣列從中間劈開,分別求其左右兩邊的最大最小值,然後將求出的最大最小值合起來進行比較。
當左右兩邊的陣列小到一定程度時:
(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...