折半法查找

来源:互联网 发布:淘宝聊天壁纸怎么设置 编辑:程序博客网 时间:2024/06/07 01:18


#include <stdio.h>

/* 

 return 要查找的数的位置,如果查找不到返回-1

 */

int  zheban(int a[],int len,int key){

    //定义变量

   int low=0;

   int mid;

   int high=len-1;

   //循环

   while (low<=high){

    

    //计算mid位置

        mid=(low+high)/2;

    //判断key  a[mid]

       if(key>a[mid]){

             //key>a[mid]   low =mid+1

            low =mid+1;

        }elseif (key<a[mid]){

            //key<a[mid]   high=mid-1

            high=mid-1;

        }else{

            //key==a[mid]   return mid;

           return mid;

        }

        }

   return -1;

}

//插入数据

int  insert(int a[],int len,int key){

    //定义变量

   int low=0;

   int mid;

   int high=len-1;

   //循环

   while (low<=high){

        

        //计算mid位置

        mid=(low+high)/2;

        //判断key  a[mid]

       if(key>a[mid]){

            //key>a[mid]   low =mid+1

            low =mid+1;

        }elseif (key<a[mid]){

            //key<a[mid]   high=mid-1

            high=mid-1;

        }else{

            //key==a[mid]   return mid;

           return mid+1;

        }

    }

   return low;

}



int main(int argc,const char * argv[]) {

   int a[]={2,5,6,8,9,23,45,47,78,88};

    //查找6的位置

   int loc=zheban(a, 10, 45);

   printf("loc=%d\n",loc);

    //要插入元素的位置

   int ins=insert(a, 10, 45);

   printf("ins=%d",ins);

   return 0;

}


0 0