美文网首页
遍历数组

遍历数组

作者: 持之以蘅 | 来源:发表于2020-03-04 21:48 被阅读0次
    #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 i;
        int a[]={1,3,2,13,14,17,19};
        int r=search(13,a,sizeof(a)/sizeof(a[0]));
        printf("%d\n",r);
        
        return 0;
    }
    
    

    散列表 hash-table

    #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;
        for(int i=0;i<len;i++){
            if(key==a[i])
            {
                ret=i;
                break;
            }
        }
        return ret;
    }
    
    int main()
    {
        int k=10;
        int a[]={1,3,2,13,14,17,19};
        int r=search(k,amount,sizeof(amount)/sizeof(amount[0]));
        //if(r>-1){
          //  printf("%s\n",name[r]);
        //}
        printf("%s\n",name[r]);
        
        return 0;
    }
    

    两个数组联合到一起--采用struct结构体的方式

    #include <stdio.h>
    
    //int amount[]={1,5,10,25,50};
    //char *name[]={"penny","nickel","dime","quarter","half-dollar"};
    
    struct{
        int amount;
        char *name;
        
    }coins[]={
        {
            1,"penny"
        },
        {
            5,"nickel"
        },
        {
            10,"dime"
        },
        {
            25,"quarter"
        },
        {
            50,"half-dollar"
        }
    };
    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 k=50;
        //int a[]={1,3,2,13,14,17,19};
        //int r=search(25,amount,sizeof(amount)/sizeof(amount[0]));
        for(int i=0;i<sizeof(coins)/sizeof(coins[0]);i++){
            if(k==coins[i].amount){
                printf("%s\n",coins[i].name);
            }
        }
        
        
        return 0;
    }
    
    

    二分搜索
    log2n

    int search(int key, int a[], int len)
    {
       int left=0;
       int right=len-1;
       int ret=-1;
       while(right>left){
           int mid=(left+right)/2;
           if(key==a[mid])
           {
               ret=mid;
               break;
           }
           else if(a[mid]>key)
           {
               right=mid-1;
           }
           else
           {
               left=mid+1;
           }
       }
       return ret;
    }
    

    相关文章

      网友评论

          本文标题:遍历数组

          本文链接:https://www.haomeiwen.com/subject/ncgilhtx.html