利用分治法求一组数据中最大的两个数和最小的两个数
来源:互联网 发布:转基因知乎 编辑:程序博客网 时间:2024/05/06 08:28
利用分治法求一组数据中最大的两个数和最小的两个数。
#define M 10
#include<stdio.h>
int a[]={3,6,0,7,8,20,16,24,10,18};
void maxtwo(int,int,int*,int*);
void mintwo(int,int,int*,int*);
void main()
{ int max1,max2,min1,min2;
maxtwo(0,M-1,&max1,&max2);
printf("The max two elements:%d %d\n",max1,max2);
mintwo(0,M-1,&min1,&min2);
printf("The min two elements:%d %d\n",min1,min2); }
void maxtwo(int i,int j,int *max1,int *max2)
{ int lmax1,lmax2,rmax1,rmax2;
int mid;
if(i==j) {*max1=a[i];*max2=a[i];}
else if (i==j-2)
{ if (a[i]>=a[i+1]&&a[i+1]>=a[i+2])
{*max1=a[i]; *max2=a[i+1];}
else if (a[i]>=a[i+2]&&a[i+2]>=a[i+1])
{*max1=a[i]; *max2=a[i+2];}
else if (a[i+1]>=a[i]&&a[i]>=a[i+2])
{*max1=a[i+1]; *max2=a[i];}
else if (a[i+1]>=a[i+2]&&a[i+2]>=a[i])
{*max1=a[i+1]; *max2=a[i+2];}
else if (a[i+2]>=a[i]&&a[i]>=a[i+1])
{*max1=a[i+2]; *max2=a[i];}
else{*max1=a[i+2]; *max2=a[i+1];} }
else
{ mid=(i+j)/2;
maxtwo(i,mid,&lmax1,&lmax2);
maxtwo(mid+1,j,&rmax1,&rmax2);
if(lmax1>=rmax1)
{ *max1=lmax1;
if (lmax2>=rmax2) *max2=lmax2;
else *max2=rmax1; }
else
{*max1=rmax1;
if (rmax2>=lmax2) *max2=rmax2;
else *max2=lmax1; } } }
void mintwo(int i,int j,int* min1,int* min2)
{ int lmin1,lmin2,rmin1,rmin2;
int mid;
if(i==j) {*min1=a[i];*min2=a[i];}
else if(i==j-2)
{ if (a[i]<=a[i+1]&&a[i+1]<=a[i+2])
{*min1=a[i]; *min2=a[i+1];}
else if (a[i]<=a[i+2]&&a[i+2]<=a[i+1])
{*min1=a[i]; *min2=a[i+2];}
else if (a[i+1]<=a[i]&&a[i]<=a[i+2])
{*min1=a[i+1]; *min2=a[i];}
else if (a[i+1]<=a[i+2]&&a[i+2]<=a[i])
{*min1=a[i+1]; *min2=a[i+2];}
else if (a[i+2]<=a[i]&&a[i]<=a[i+1])
{*min1=a[i+2]; *min2=a[i];}
else{*min1=a[i+2]; *min2=a[i+1];} }
else{ mid=(i+j)/2;
mintwo(i,mid,&lmin1,&lmin2);
mintwo(mid+1,j,&rmin1,&rmin2);
if(lmin1<=rmin1)
{*min1=lmin1;
if (lmin2<=rmin2) *min2=lmin2;
else *min2=rmin1; }
else{*min1=rmin1;
if (rmin2<=lmin2) *min2=rmin2;
else *min2=lmin1; } } }
- 利用分治法求一组数据中最大的两个数和最小的两个数
- 求一组整数中最小的两个数
- 给一个数a,求一组数据中是否有两个数的和为a?
- 利用库函数求两个数的和
- (使用STL自带的排序功能进行排序7.3.12)UVA 11057 Exact Sum(在一组数据中找到这么两个数,使得他们的和等于指定数&&且这两个数之间的差值最小)
- 求两个数的和
- 求两个数的和
- 求两个数的和
- 选择数组中最大或者最小的两个数
- 两个数中显示最大的数
- 求两个数的最小公约数和最小公倍数
- 求两个数的最大公因数
- 求两个数的最大公约公倍数
- 求两个数的最大公因数
- 求两个数的最大公因数
- 分治法求一组数据的和
- 分治法求一组数据的和
- C++:求10个数中最大的两个数
- POJ1003
- 触摸屏驱动方面的文章
- iOS开发——keychain的使用
- 求数列的最大字段和
- 输入输出重定向的多种方式
- 利用分治法求一组数据中最大的两个数和最小的两个数
- 高并发,高流量的网站常用优化方式
- 黑马程序员 交通灯
- Tmux使用初体验
- iPhone开发--更改xcode中的Apple ID
- android The connection to adb is down, and a severe error has occured
- python学习(1)
- poj 2983(差分约束)
- X64 64位Windows 7系统上部署Apache + PHP + MySQL