求最大、最小值的高效算法
2009-10-16 18:23
162 查看
void MaxMin(int a[], int n)
{
int max,min,s,i; //s为循环起始元素的下标
if (n < 1) return;
if (n == 1) max = min = 0;
else
{
//n为奇数时,max和min初值为第0个元素
if (n%2) {max = min = 0; s = 1;}
//n为偶数时,max和min初值为第0、1个元素比较后的结果
else
{
if (a[0] > a[1]) {max = 0; min = 1;}
else {max = 1; min = 0;}
s = 2;
}
for(i = s; i < n; i+=2) //比较余下的数对
{
//先比较a[i]和a[i+1],再和max、min比较
if(a[i] > a[i+1])
{if(a[i]>a[max]) max=i; if(a[i+1]<a[min]) min=i+1;}
else
{if(a[i+1]>a[max]) max=i+1; if(a[i]<a[min]) min=i;}
}
}
printf("max = %d,min = %d",a[max],a[min]);
}
void main()
{
int a[6] = {62,31,84,96,19,47};
MaxMin(a,6);
}
{
int max,min,s,i; //s为循环起始元素的下标
if (n < 1) return;
if (n == 1) max = min = 0;
else
{
//n为奇数时,max和min初值为第0个元素
if (n%2) {max = min = 0; s = 1;}
//n为偶数时,max和min初值为第0、1个元素比较后的结果
else
{
if (a[0] > a[1]) {max = 0; min = 1;}
else {max = 1; min = 0;}
s = 2;
}
for(i = s; i < n; i+=2) //比较余下的数对
{
//先比较a[i]和a[i+1],再和max、min比较
if(a[i] > a[i+1])
{if(a[i]>a[max]) max=i; if(a[i+1]<a[min]) min=i+1;}
else
{if(a[i+1]>a[max]) max=i+1; if(a[i]<a[min]) min=i;}
}
}
printf("max = %d,min = %d",a[max],a[min]);
}
void main()
{
int a[6] = {62,31,84,96,19,47};
MaxMin(a,6);
}
相关文章推荐
- hdu5289 Assignment (区间查询最大值最小值,st算法...)
- 算法--求数组中的最大和最小值
- 【算法Ⅰ~Ⅳ(C++实现)】习题3.1 寻找int float double能表示的最大最小值
- 算法提高 题目1 最大最小值
- 算法提高 ADV-162 题目1 最大最小值
- 蓝桥杯 算法提高 题目1 最大最小值
- Hadoop链式MapReduce、多维排序、倒排索引、自连接算法、二次排序、Join性能优化、处理员工信息Join实战、URL流量分析、TopN及其排序、求平均值和最大最小值、数据清洗ETL、分析气
- STL算法-归并和最大最小值算法
- 最大最小值算法
- 算法提高 题目1 最大最小值
- 高效算法设计_算法分析初步(最大连续和)
- 蓝桥杯 算法提高 题目1 最大最小值
- javascript数据结构与算法---检索算法(顺序查找、最大最小值、自组织查询)
- 算法题-最大值减去最小值小于或等于 num 的子数组数量
- 算法提高 题目1 最大最小值
- 算法题-最大值减去最小值小于或等于 num 的子数组数量
- AI象棋中的,最大最小值算法思路
- 整型数组处理算法(四)求数组的最大值和最小值
- STL fill()填充算法以及for_each()算法 取容器中的最大最小值min_element,max_element