#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define N 20
void Merge(int a[], int p, int mid, int r)
{
int result[r-p+1];
int k;
int i = p;
int j = mid + 1;
for(k=p;k<=r;k++)
{
result[k-p]=a[k];
}
for (k = p; k <= r; ++k) {
if (i > mid)
{
a[k]=result[j-p];
j++;
}else if(j > r)
{
a[k]=result[i-p];
i++;
}else if(result[i-p]>result[j-p])
{
a[k]=result[j-p];
j++;
}else{
a[k]=result[i-p];
i++;
}
}
}
void Mergesort(int a[],int p,int r)
{
int mid;
if(p < r)
{
mid= (p + r) / 2;
Mergesort(a, p , mid);
Mergesort(a, mid + 1, r);
Merge(a, p , mid, r);
}
}
void serch(int a[],int target,int p,int r)
{
int mid =(p+r)/2;
if(target > a[mid])
{
p=mid+1;
}
if(target < a[mid])
{
r=mid-1;
}
if(target==a[mid])
{
printf("%d",a[mid]);
return;
}
else
{
serch(a,target,p,r);
}
}
int main( void )
{
printf("1900300425王麒达\n");
srand( (unsigned)time( NULL ) );
int a[21];
for(int i=0;i<N;++i)
{
// scanf("%d",&a[i]);
a[i]=rand()%100 + 1;
printf("%d ",a[i]);
}
int target;
scanf("%d",&target);
Mergesort(a,0,N-1);
int m = 0;
for (m = 0; m < N; ++m) {
if(m==N-1)
{
printf("%d",a[m]);
continue;
}
printf("%d ",a[m]);
}
// printf("%d",target);
printf("\n");
serch(a,target,0,N-1);
return 0;
}
02-10
1365
06-19
12万+
09-29
1089
09-17