基礎算法 分治法求最大最小元


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

當左右兩邊的數組小到一定程度時:

(1)數組中只有一個元素,maxNum=minNum;

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

(3)數組中大於兩個元素,從中間分開,繼續遞歸;

 1 #include<stdio.h>  
 2 #include<iostream>  
 3 #include<stdlib.h>  
 4 using namespace std;  
 5   
 6 int arr[10];  
 7 void getMax_Min(int left,int right,int &maxNum,int &minNum){  
 8     if(left==right){  
 9         maxNum=arr[left];  
10         minNum=arr[left];  
11         return ;  
12     }else if(left+1==right){  
13         maxNum=arr[left]>arr[right]?arr[left]:arr[right];  
14         minNum=arr[left]>arr[right]?arr[right]:arr[left];  
15         return ;  
16     }else{  
17         int mid=(left+right)/2;  
18         int leftMax,leftMin,rightMax,rightMin;  
19         getMax_Min(left,mid,leftMax,leftMin);//遞歸找出左邊的最大最小值   
20         getMax_Min(mid,right,rightMax,rightMin);//遞歸找出右邊的最大最小值   
21         maxNum=max(leftMax,rightMax);//左右兩邊最大值相比較,取最大的   
22         minNum=min(leftMin,rightMin);//左右兩邊最小值相比較,取最小的   
23     }  
24 }  
25   
26 int main(){  
27     for(int i=0;i<10;i++){  
28         arr[i]=rand();//生成隨機數   
29         cout<<arr[i]<<" ";    
30     }  
31     cout<<endl;  
32     int maxNum,minNum;  
33     getMax_Min(0,9,maxNum,minNum);  
34     cout<<"最大值是:"<<maxNum<<" 最小值是:"<<minNum<<endl;  
35     return 0;  
36 }   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM