分治算法——入门简单实例
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;
}
就是先排序,然后最大值和最小值就是头尾了。
这里用分治法来求最大值和最小值了。代码如下:
#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;
}
相关文章推荐
- struts简单入门实例
- js入门·循环与判断/利用函数的简单实例/使用对象/列举对象属性的名称
- 简洁 DIV+CSS布局入门之三 ( DIV+CSS常用 常用CSS DIV+CSS实例 简单DIV+CSS DIV+CSS布局分析 DIV+CSS流程)
- Ant入门简单实例
- 最简单的html入门实例
- Spring简单入门实例
- ASP.NET 2.0 新手SQL存储过程简单实例入门 绝对经典入门
- 简洁 DIV+CSS布局入门之一 ( DIV+CSS常用 常用CSS DIV+CSS实例 简单DIV+CSS DIV+CSS布局分析 DIV+CSS流程)
- JFreeChart简单介绍及入门实例 - [JAVA编程]
- 一个简单的linux下网络程序实例-网络编程入门 收藏
- WinForm调用WebService简单实例详解【新手入门】
- 实例入门(简单展开或关闭)
- 第四课 JBPM简单实例入门
- 简洁 DIV+CSS布局入门之二 ( DIV+CSS常用 常用CSS DIV+CSS实例 简单DIV+CSS DIV+CSS布局分析 DIV+CSS流程)
- jbpm 入门实例(4)—— JBPM简单实例入门
- 一个简单的linux下网络程序实例-网络编程入门
- Struts2简单配置与入门实例
- js实例入门(简单展开或关闭)
- ASP.NET 2.0 新手SQL存储过程简单实例入门。绝对经典入门
- 第四课 JBPM简单实例入门