第1个回答 2012-03-29
#include<stdio.h>
int a[100];
void maxAndMin(int i,int j,int flag,int &max,int &min){
int mid;
if(i == j)
max = min = a[i];
else if(i == j-1){
if(a[i]<a[j]){
max = a[j];
min = a[i];
}
else{
if(flag == 0){
min = max = a[j];
}
if(flag == 1)
max = min = a[i];
}
}
else{
mid = (i+j)/2;
int max1,min1;
maxAndMin(1,mid,0,max1,min1);
maxAndMin(mid+1,j,1,max,min);
if(max<max1&&max1!=min1)
max = max1;
if(min>min1)
min = min1;
}
}
int main(){
int n,i,max,min;
scanf("%d",&n);
for(i = 1;i<=n;i++){
scanf("%d",&a[i]);
}
maxAndMin(1,n,0,max,min);
if(max!=min)
printf("%d",max-min);
else
printf("no");
return 0;
}本回答被提问者采纳
第2个回答 2010-04-24
不会算时间复杂度,下面的代码能正确输出结果,但不晓得时间复杂度是不是O(nlogn)
void main()
{
int i,j,n,p[10],c=0,g=0,s,t=0;
printf("Input(n<10):\n");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&p[i]);
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
s=p[j]-p[i];
if(s>t) {t=s;c=i+1,g=j+1;}
}
}
printf("Output:\n");
if(c<1) printf("no\n");
else printf("%d %d",c,g);
}