遍历数组

2020-03-04  本文已影响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;
}
上一篇 下一篇

猜你喜欢

热点阅读