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