1.顺序查找
2.折半查找
代码:
顺序查找的代码:
int SEQ_SEARCH(int a[],int k){
int i;
for(i=0;i<N;i++){
if(k==a[i]){
printf("用顺序查找了%d次\n",i+1);
return i;
}
}
return -1;
}
折半查找的代码:
int BIN_SEARCH(int a[],int k){
int low=0,high=N-1,mid,i=0;
while(low<=high)
{ i++;
mid=(low+high)/2;
if(a[mid]==k){
printf("用折半查找法查找了%d次\n",i);
return mid;
}
if(k<a[mid]){
high=mid-1;
}
else{
low=mid+1;
}
}
return -1;
}
总的验证代码
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
#define N 20
int *creatnumber(int a[]){//创建一个数组,返回的是一个数组的指针
srand((unsigned)time(NULL));//用时间创建新的种子这样就可以得到不同的随机数
for(int i=0;i<N;i++)
a[i]=rand();//随机数
for(int i=0;i<N-1;i++){//对产生的数组进行冒泡排序
for(int j=0;j<N-1-i;j++){
if(a[j]>a[j+1]){
int x=a[j];
a[j]=a[j+1];
a[j+1]=x;
}
}
}
return a;
}
int SEQ_SEARCH(int a[],int k){//顺序查找
int i;
for(i=0;i<N;i++){
if(k==a[i]){
printf("用顺序查找了%d次\n",i+1);
return i;
}
}
return -1;
}
int BIN_SEARCH(int a[],int k){//折半查找
int low=0,high=N-1,mid,i=0;
while(low<=high)
{ i++;
mid=(low+high)/2;
if(a[mid]==k){
printf("用折半查找法查找了%d次\n",i);
return mid;
}
if(k<a[mid]){
high=mid-1;
}
else{
low=mid+1;
}
}
return -1;
}
int main(){
int a[N];
int *x;
int k,y;
x=creatnumber(a);
for(int i=0;i<N;i++){
printf("%d\t",x[i]);
}
printf("\n输入要查找的数\n");
scanf("%d",&k);
printf("用顺序查找法\n");
y=SEQ_SEARCH(x,k);
if(y==-1)
printf("未查找到\n");
else
printf("查找到的数是在数组的%d位置\n",y);
printf("用折半查找法\n");
y=BIN_SEARCH(x,k);
if(y==-1)
printf("未查找到\n");
else
printf("查找到的数是在数组的%d位置",y);
}
结果