1. 顺序查找
顺序查找
//顺序查找
int Search_Seq(int A[],int n,int key){
int i;
A[0]=key;
/*
for (i = 1; ; i++)
if (A[i] == key)
break;
if (i < n)
return i;
else
return -1;
*/
for(i=n;A[i]!=key;--i)
{
}
return i;
}
int main(){
int a[11],i,key,k;
printf("请输入10个数据:\n");
for (i =1;i<=10;i++)
scanf("%d",&a[i]);
printf("原始顺序:\n");
for(i=1;i<11;i++)
printf("%5d",a[i]);
//将未排序前的顺序输出
HeapSort(a,10);
printf("\n 插入数据排序后顺序:\n");
for(i=1;i<11;i++)
printf("%5d",a[i]); //将排序后的数组输出
printf("\n");
printf("请输入您想查找的元素:\n");
scanf("%d",&key);
//顺序查找
k= Search_Seq(a,10,key);
printf("查找出来的位置是%d\n",k);
}
2. 折半查找
折半查找
//折半查找
int Binary_Search(int a[],int n,int key){
int low,high,mid;
low=1;high=n;
//由于我的表从a[1]开始才有数据,所以下角标为此
//若从a[0]存储就是low=-1;high=n-1;
while(low<=high){
mid=(low+high)/2;
if(a[mid]==key)
return mid;
else if(a[mid]>key)
high=mid-1;
else
low=mid+1;
}return -1;}
int main(){
int a[11],i,key,k;
printf("请输入10个数据:\n");
for (i =1;i<=10;i++)
scanf("%d",&a[i]);
printf("原始顺序:\n");
for(i=1;i<11;i++)
printf("%5d",a[i]);
//将未排序前的顺序输出
HeapSort(a,10);
printf("\n 插入数据排序后顺序:\n");
for(i=1;i<11;i++)
printf("%5d",a[i]); //将排序后的数组输出
printf("\n");
printf("请输入您想查找的元素:\n");
scanf("%d",&key);
//二分查找
k=Binary_Search(a,10,key);
printf("查找出来的位置是%d\n",k);}
3. 分块查找
分块查找
//自定义函数block_search,实现分块查找
struct index{
int key;
int start;
int end;
}index_table[4];
int block_search(int key,int a[]){
int i,j;
i=1;
while(i<=3&&key>index_table[i].key)//确定在哪个块中
i++;
if(i>3)//大于分得的块数,则返回0
return 0;
j=index_table[i].start;//j等于块范围的起始值
while(j<=index_table[i].end&&a[j]!=key)
j++;
if(j>index_table[i].end)
j=0;
return j;
}
int main(){
//分块查找数据
int i,j=0,k,key,a[16];
printf("请输入15个数:\n");
for(i=1;i<16;i++)
scanf("%d",&a[i]);
for(i=1;i<=3;i++){
index_table[i].start=j+1;
j=j+1;
index_table[i].end=j+4;
index_table[i].key=a[j];
}
printf("请输入您想查找的元素:\n");
scanf("%d",&key);
k=block_search(key,a);
if(k!=0)
printf("查找成功,其位置是:%d\n",k);
else
printf("查找失败!");
return 0;
}