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