binary search algorithm

二分查找算法实现
本文介绍了一种经典的二分查找算法实现方式,并通过C语言代码示例详细展示了其工作原理。该算法适用于有序数组中搜索特定元素的位置。
[cpp]view plaincopyprint?
  1. /* 
  2.  * ===================================================================================== 
  3.  * 
  4.  *       Filename:  test.c 
  5.  * 
  6.  *    Description: Binary Search Algorithm  
  7.  * 
  8.  *        Version:  1.0 
  9.  *        Created:   
  10.  *       Revision:  none 
  11.  *       Compiler:  gcc 
  12.  * 
  13.  *         Author:    
  14.  *   Organization:   
  15.  * 
  16.  * ===================================================================================== 
  17.  */  
  18.   
  19. #include    <stdlib.h>  
  20.   
  21. /*  
  22.  * ===  FUNCTION  ====================================================================== 
  23.  *         Name:  main 
  24.  *  Description:   
  25.  * ===================================================================================== 
  26.  */  
  27. //  
  28. #include <stdio.h>  
  29. #include <time.h>  
  30. #include <limits.h>  
  31. int  
  32. binary_search (int array[], int length, int n )  
  33. {  
  34.     int position;  
  35.     int mid;  
  36.     int left=0, right = length;  
  37.   
  38.     mid = (left + right)/2;  
  39.     position = INT_MAX;  
  40.     while ( left <= right) {  
  41.   
  42.             if ( array[mid] > n) {  
  43.                 right = mid-1;  
  44.             }  
  45.             else if(array[mid] < n)  
  46.             {  
  47.                 left = mid+1;  
  48.             }  
  49.             else if(array[mid] == n)  
  50.             {  
  51.                 position = mid;  
  52.                 break;  
  53.             }else{  
  54.             }  
  55.             mid = (left + right)/2;  
  56. //          printf ( "%d %d %d %d\n",left,right,mid, n);  
  57.     }  
  58.     return position;  
  59. }       /* -----  end of function binary_search  ----- */  
  60. /*  
  61.  * ===  FUNCTION  ====================================================================== 
  62.  *         Name:  randomnumbergenerator 
  63.  *  Description:   
  64.  * ===================================================================================== 
  65.  */  
  66. int  
  67. random_number_generator (int min, int max)  
  68. {  
  69.     int n=0;  
  70.     if(min > max)  
  71. {  
  72.     printf ( "range error. Max: %d, Mix: %d\n", max, min );  
  73.     return 0;  
  74. }  
  75.     n = rand()%(max-min+1)+min;  
  76.     return n;  
  77. }       /* -----  end of function randomnumbergenerator  ----- */  
  78. int  
  79. main ( int argc, char *argv[] )  
  80. {  
  81.     int n;  
  82.     int array[10];  
  83.     int i;    
  84.     int ret;  
  85.     srand(time(NULL));  
  86.     for (i=0; i<sizeof(array)/sizeof(int); ++i ) {  
  87.         array[i] = i;  
  88.     }  
  89.     srand(time(NULL));  
  90.     for(i=0; i<10000; ++i)  
  91.     {  
  92.     n = random_number_generator(-10,10);  
  93.     {  
  94.     ret = binary_search(array, sizeof(array)/sizeof(int),n);  
  95.     if(ret == n)  
  96.     printf ( "find %d\n", n);  
  97.     else  
  98.     printf ( "can't find %d\n", n);  
  99. }  
  100.     }  
  101.     return EXIT_SUCCESS;  
  102. }               /* ----------  end of function main  ---------- */  
文章出自:http://blog.youkuaiyun.com/fanwenbo/article/details/7935899
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值