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

Posted 吴云龙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础算法 分治法求最大最小元相关的知识,希望对你有一定的参考价值。

思路:运用分治的思想,将要排序的整个数组从中间劈开,分别求其左右两边的最大最小值,然后将求出的最大最小值合起来进行比较。

当左右两边的数组小到一定程度时:

(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 }   

 

以上是关于基础算法 分治法求最大最小元的主要内容,如果未能解决你的问题,请参考以下文章

分治理法求数组最大值

分治法求一个数组中最大最小值

利用分治法求n个数的最大连续和

分治法求最大子序列

分治法求解最大子段和问题

分治算法-----二分求最大最小