#include <stdio.h>
#include <stdlib.h>
#include<time.h>
#define n 20
int number[1000];
int b[1000];
void mergeSort(int left,int right)
{
int i;
if(left<right){
i=(left+right)/2;
mergeSort(left,i);
mergeSort(i+1,right);
merge(left,i,right);
copy(left,right);
}
}
void merge(int left ,int i,int right)
{
int begin=left;
int left_end=i++;
int right_end=right;
while((left<=left_end)&&(i<=right_end))
{
if(number[left]>number[i])
b[begin++]=number[i++];
else
b[begin++]=number[left++];
}
if(left<=left_end)
{
while(left<=left_end)
b[begin++]=number[left++];
}
else
{
while(i<=right_end)
b[begin++]=number[i++];
}
}
void copy(int left,int right)
{
while (left<=right)
{
number[left]=b[left];
left++;
}
}
int search(int x)
{
int left =1,right = n;
int mid;
while(left<=right)
{
mid =(left+right)/2;
if(number[mid]==x)
return mid;
else if(number[mid]>x)
{
right=mid-1;
}
else
{
left=mid+1;
}
}
return -1;
}
int main()
{
int i;
int x;
int num;
srand((unsigned)time(NULL));
for(i=0;i<n;i++)
{
number[i]=1+rand()%99;
}
mergeSort(0,n-1);
for(i=0;i<n;i++)
{
printf("%d ",number[i]);
}
printf("\n");
printf("请输入要查询的数值:");
scanf("%d",&x);
num=search(x);
if(num==-1)
printf("查找错误!");
else
printf("您查找的数位于number[%d]\n",num);
return 0;
}
运行结果截图: