搜索

线性搜索:遍历,在一个数组中找到某个数的位置(或确认是否存在)

#include<stdio.h>

int search(int key, int a[], int len){
int ret = -1;
for(int i = 0; i<len; i++)
{
if(key==a[i])
{
ret = i;
break;
}
}
return ret;

}

int main(){
int a[] = {10,543,6,4,18,40,55,322,4,12,8,5};
int r = search(55, a, sizeof(a)/sizeof(a[0]));
printf("%d", r);

return 0;

 

用结构体把值和对应的字符串放在一起

#include<stdio.h>

struct{
int amount;
char *name;
}coins[]={
{1,"penny"},
{5,"nickel"},
{10,"dime"},
{25,"quarter"},
{50,"half-dollar"},
};

int main(){
int k=10;
int i=0;
for( i; i<sizeof(coins)/sizeof(coins[0]); i++){
if(k==coins[i].amount){
printf("%s\n", coins[i].name);
break;
}
}
}

}

 

二分法搜索

当数据按照某种次序排好顺序,用二分法搜索,效率高

比如,按照由小到大排序:

#include<stdio.h>

int search(int key, int a[], int len){
int ret = -1;
int left = 0;
int right = len-1;
int mid;

while(right>left){
mid = (left+right)/2;
if(a[mid] == key){
ret = mid;
printf("a[%d]=%d\n", ret, key);
break;
}else if(a[mid] > key){
right = mid-1;
}else{
left = mid+1;
}
}
return ret;
}

int main(){
int k=36;
int a[]={1,3,5,6,11,23,33,35,36,40,48,49};
int r=search(k, a, sizeof(a)/sizeof(a[0]));
}

 

posted @ 2021-12-07 21:28  泰勒斯儿童营养牙膏  阅读(16)  评论(0编辑  收藏  举报