注册 登录
编程论坛 数据结构与算法

求一分治算法

ooooo 发布于 2006-05-28 09:20, 1075 次点击
一个整形数组有17个元素
找出这个数组的最大元素和次大元素
7 回复
#2
starrysky2006-05-28 11:09
办法1:在各种排序算法中选一种对数组进行排序,然后输出最大值和次大值.
办法2:用指针遍历一遍找到最大值,然后再遍历剩下的元素找到次大值.
办法3:一次性输出最大值和次大值,参看下面的帖子
https://www.bc-cn.net/bbs/dispbbs.asp?boardID=5&ID=66853&page=3

办法4(推荐,效率最高的算法):用锦标赛排序法(树形选择排序法)进行排序,找到最大值和次大值;或是用其改进算法堆排序进行排序.
#3
soft_wind2006-05-28 11:33
#4
独角龙2006-05-28 12:44
楼上大哥,你那次写的有点乱啊,看的我头都晕了,现在还没很明白呢!

能不能发个不用指针的,或少用指针!!
#5
soft_wind2006-05-29 16:42

#include "stdio.h"
#include "conio.h"
void maxmin(int a[],int n,int *max,int *min)
{
int a1[5],a2[5];
int i,j,k=0;
int max1,max2,min1,min2;
if(n==1)
*max=*min=a[0];
else if(n==2)
{
if(a[0]>a[1])
{
*max=a[0];
*min=a[1];
}
else
{
*max=a[1];
*min=a[0];
}
}
else
{
for(i=0;i<n/2;i++)
a1[i]=a[i];
for(j=i;j<n;j++)
a2[k++]=a[j];
maxmin(a1,n/2,&max1,&min1);
maxmin(a2,(n-n/2),&max2,&min2);
if (max1 > max2)
*max = max1;
else
*max = max2;
if (min1 > min2)
*min = min2;
else
*min = min1;
}

}
main()
{
int a[10]={1,12,21,4,57,78,95,43,100,23};
int max,min;
maxmin(a,10,&max,&min);
printf("%d %d",max,min);
getch();
}

#6
ooooo2006-05-29 17:18
perfect 3q
#7
独角龙2006-05-29 20:04

谢谢!

#8
smallmass2010-10-26 11:37
1