第七周:数组运算---2-搜索

线性搜索:逐个依次

#include<stdio.h>

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

    return ret;
} 

int main()
{
    int a[]={1,3,2,5,12,14,23,6,9,45};
    int r = search( 16 , a , sizeof(a)/sizeof(a[0]) );
    printf("%d\n",r);

    return 0;
}

比较 1

#include<stdio.h>

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

    return -1;
} 

// 违反了单一出口原则 

int main()
{
    int a[]={1,3,2,5,12,14,23,6,9,45};
    int r = search( 16 , a , sizeof(a)/sizeof(a[0]) );
    printf("%d\n",r);

    return 0;
}

比较 2

#include<stdio.h>

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

    if(i==len)
    {
        return -1;
    } 
    else
    {
        return i;
    }
} 

// i 承担了多个责任,一专多能并不是好的代码 

int main()
{
    int a[]={1,3,2,5,12,14,23,6,9,45};
    int r = search( 16 , a , sizeof(a)/sizeof(a[0]) );
    printf("%d\n",r);

    return 0;
}

图片说明


#include<stdio.h>

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

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

    return ret;
} 

int main()
{
    int k=10;
    int r = search( k , amount , sizeof(amount)/sizeof(amount[0]) );
    if( r>-1)
    {
        printf("%s\n",name[r]);
    }

    return 0;
}

#include<stdio.h>

int main(){

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

    int k=10;
    int i;

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

    return 0;
}

#include<stdio.h>

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

    while ( right>left )
    {
        int mid = (left+right ) / 2;
        if( a[mid] == k )
        {
            ret = mid;
            break;
        }else if (a[mid]>k )
        {
            right = mid-1; 
        }else {
            left = mid+1;
        }    
    }

    return ret;
} 
全部评论

相关推荐

03-27 17:33
门头沟学院 Java
代码飞升:同学院本,你要注意hr当天有没有回复过,早上投,还要打招呼要推销自己,不要一个劲投
点赞 评论 收藏
分享
05-03 12:45
西南大学 Java
sdgfdv:你这项目写的内容太多了,说实话都是在给自己挖坑,就算简历过了,后面面试也难受
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务