/*给定有限集合{10,14,19,26,27,31,33,35,42,44},查找19
(1) 分别实现升序和降序的顺序查找方法;
(2) 将顺序查找算法改为二分查找;*/
#include<stdio.h>
#include<string.h>
#define N 10
/*int cour_1=0;
int cour_2=0;
int cour_3=0;*/
int a[]={10,14,19,26,27,31,33,35,42,44};
int SeqSearch_1(int a[],int key,int n)//升序查找
{
int i;
int cour_1=0;
for(i=0;i<n;i++)
{
cour_1++;
if(key==a[i]) {
printf("*查找次数为%d\n",cour_1);
return i;
}
}
printf("*查找次数为%d\n",cour_1);
return -1;
}
int SeqSearch_2(int a[],int key,int n)//降序查找
{
int i;
int cour_2=0;
for(i=n-1;i>-1;i--)
{
cour_2++;
if(key==a[i])
{
printf("*查找次数为%d\n",cour_2);
return i;
}
}
printf("*查找次数为%d\n",cour_2);
return -1;
}
int TwoSearch(int a[],int key,int n)//二分查找
{
int left=0;
int right=n-1;
int cour_3=0;
while(left<=right)
{
int mid=(left+right)/2;
cour_3++;
if(key<a[mid]) right=mid-1;
else if(key>a[mid]) left=mid+1;
else if(key==a[mid])
{
printf("*查找次数为%d\n",cour_3);
return mid;
}
}
printf("*查找次数为%d\n",cour_3);
return -1;
}
int main()
{
printf("a[]={");
for(int i=0;i<10;i++)
{
printf("%d",a[i]);
if(i<=8){
printf(",");
}
}
printf("}\n");
int key;
printf("要查找的数:");
scanf("%d",&key);
printf("______升序查找_______\n");
if(SeqSearch_1(a,key,10)!=-1)
printf("要查找的数的位置在%d\n",SeqSearch_1(a,key,10)+1);
else {
printf("查找失败!\n");
}
printf("\n");
printf("______降序查找_______\n");
if(SeqSearch_2(a,key,10)!=-1)
printf("要查找的数的位置在%d\n",SeqSearch_2(a,key,10)+1);
else printf("查找失败!\n");
printf("\n");
printf("______二分查找_______\n");
if(TwoSearch(a,key,10)!=-1)
printf("要查找的数的位置在%d\n",TwoSearch(a,key,10)+1);
else printf("查找失败!\n");
printf("\n");
return 0;
}
二分 查找
于 2023-05-22 12:44:44 首次发布