#include "stdafx.h"
#include <math.h>
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
void PartionGet(int s,int e,int *meter,int *max,int *min);
int _tmain(int argc, _TCHAR* argv[])
{
//分治法,这里是使用的二分法来求出最大值和最小值
const int ArraySize = 50;
int a[ArraySize];
srand((unsigned)time(NULL));//用当前时间,设置种子
for (int i = 0;i< ArraySize;i++)
{
a[i] = rand();
}
int max = INT_MIN; /* 用最小值初始化 */
int min = INT_MAX; /* 用最大值初始化 */
PartionGet(0,ArraySize - 1,a,&max,&min); /* 分治法获取最值 */
for (int i = 0;i< ArraySize;i++)
{
if (i % 6 == 0)
{
cout<<endl;
}
cout<<a[i]<<" ";
}
cout<<endl;
cout<<"最大值:"<<max<<endl<<"最小值:"<<min<<endl;
getchar();
return 0;
}
/* 分治法获取最优解 */
void PartionGet(int s,int e,int *meter,int *max,int *min)
{
/* 参数:
* s 当前分治段的开始下标
* e 当前分治段的结束下标
* meter 数组的地址
* max 存储当前搜索到的最大值
* min 存储当前搜索到的最小值
*/
int i;
if(e-s <= 1)
{ /* 获取局部解,并更新全局解 */
if(meter[s] > meter[e])
{
if(meter[s] > *max)
*max = meter[s];
if(meter[e] < *min)
*min = meter[e];
}
else
{
if(meter[e] > *max)
*max = meter[e];
if(meter[s] < *min)
*min = meter[s];
}
return ;
}
i = s + (e-s)/2; /* 不是子问题继续分治,这里使用了二分,也可以是其它 */
PartionGet(s,i,meter,max,min);
PartionGet(i+1,e,meter,max,min);
}
#include <math.h>
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
void PartionGet(int s,int e,int *meter,int *max,int *min);
int _tmain(int argc, _TCHAR* argv[])
{
//分治法,这里是使用的二分法来求出最大值和最小值
const int ArraySize = 50;
int a[ArraySize];
srand((unsigned)time(NULL));//用当前时间,设置种子
for (int i = 0;i< ArraySize;i++)
{
a[i] = rand();
}
int max = INT_MIN; /* 用最小值初始化 */
int min = INT_MAX; /* 用最大值初始化 */
PartionGet(0,ArraySize - 1,a,&max,&min); /* 分治法获取最值 */
for (int i = 0;i< ArraySize;i++)
{
if (i % 6 == 0)
{
cout<<endl;
}
cout<<a[i]<<" ";
}
cout<<endl;
cout<<"最大值:"<<max<<endl<<"最小值:"<<min<<endl;
getchar();
return 0;
}
/* 分治法获取最优解 */
void PartionGet(int s,int e,int *meter,int *max,int *min)
{
/* 参数:
* s 当前分治段的开始下标
* e 当前分治段的结束下标
* meter 数组的地址
* max 存储当前搜索到的最大值
* min 存储当前搜索到的最小值
*/
int i;
if(e-s <= 1)
{ /* 获取局部解,并更新全局解 */
if(meter[s] > meter[e])
{
if(meter[s] > *max)
*max = meter[s];
if(meter[e] < *min)
*min = meter[e];
}
else
{
if(meter[e] > *max)
*max = meter[e];
if(meter[s] < *min)
*min = meter[s];
}
return ;
}
i = s + (e-s)/2; /* 不是子问题继续分治,这里使用了二分,也可以是其它 */
PartionGet(s,i,meter,max,min);
PartionGet(i+1,e,meter,max,min);
}