#include<stdio.h>
#include<stdlib.h>
void SeqSearch(int a[],int r) //顺序查找
{
int i=9;
a[0]=r;
while(a[i]!=r)
{
i--;
}
if(i!=0) printf("元素所在位置:%d\n",i);
else printf("没有该元素!");
}
int BinSearch1(int a[],int r) //折半查找(非递归)
{
int mid,low=1,high=9;
while(low<=high)
{
mid=(low+high)/2;
if(r<a[mid]) high=mid-1;
else if(r>a[mid]) low=mid+1;
else return mid;
}
return 0;
}
int BinSearch2(int a[],int low,int high,int r) //折半查找(递归)
{
int mid;
if(low>high) return 0;
else
{
mid=(low+high)/2;
if(r>a[mid]) BinSearch2(a,mid+1,high,r);
else if(r<a[mid]) BinSearch2(a,low,mid-1,r);
else return mid;
}
return 0;
}
int main()
{
int i,j,k,temp,low=1,high=9,b,r,a[10];
printf("请输入9个数据:\n");
for(i=1;i<10;i++)
scanf("%d",&a[i]);
do
{
printf("\n0.退出\t1.顺序查找\t2.折半查找(非递归)\t3.折半查找(递归)\n请输入查找方式和待查找的数:\t");
scanf("%d,%d",&b,&r);
switch(b)
{
case 0 :exit(0);
case 1 :SeqSearch(a,r);break;
case 2 :
for(i=1;i<10;i++)
for(j=i+1;j<10;j++)
{
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
k=BinSearch1(a,r);
if(k!=0) printf("元素所在位置:%d\n",k);
else printf("没有该元素!\n");
break;
case 3 :
for(i=1;i<10;i++)
for(j=i+1;j<10;j++)
{
if(a[i]>a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
k=BinSearch2(a,low,high,r);
if(k!=0) printf("元素所在位置:%d\n",k);
else printf("没有该元素!\n");
break;
default:printf("输入错误!\n");break;
}
}while(b!=0);
return 0;
}