搜索
线性搜索:遍历,在一个数组中找到某个数的位置(或确认是否存在)
#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]));
}