您的位置:首页 > 其它

分治算法——入门简单实例

2017-01-06 22:32 218 查看
  求最大值和最小值,相信再简单不过了,只要一个循环遍历,然后每次比较最大的和最小的值,然后遍历完后就得到了最大值和最小值了。

就是先排序,然后最大值和最小值就是头尾了。

      这里用分治法来求最大值和最小值了。代码如下:

#include <stdio.h>  

   

int aa[] = {1, 5, 0, -8, 4, 2};  

   

void get_max_min(int *s, int *nmax, int * nmin, int left, int right)  

{  

              int max1, max2;  

              int min1, min2;  

              int mid;  

                

              if(left == right)      //最小的子问题就一个数,那么最大值和最小值都是其本身  

              {  

                             *nmax = *nmin = s[left];         

                             return ;                    

              }  

              else if(left == (right - 1)) //最小的子问题是两个数,那么比较得出其最大最小值。  

              {  

                             max1 = s[left];  

                             max2 = s[right];  

                             *nmax = max1 > max2 ? max1 : max2;  

                             *nmin = max1 < max2 ? max1 : max2;  

                             return ;  

              }  

              else   //否则,子问题还不够小,那么继续分治  

              {  

                             mid = (left + right) / 2;  

                             get_max_min(s, &max1, &min1, left, mid);  

                             get_max_min(s, &max2, &min2, mid+1, right);  

                            *nmax = max1 > max2 ? max1 : max2;               //子问题的解合并求最大值和最小值  

                             *nmin = min1 < min2 ? min1 : min2;                    

                             return ;  

              }  

}  

   

int main()  

{  

              int max, min;  

               

              get_max_min(aa, &max, &min, 0, 5);     

                

              printf("max: %d\n", max);       

              printf("min: %d\n", min);  

                

              return 0;  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: