二分查找法找数字位置

前几天闲来无事,写了一段 C 的"二分查找法找数字位置"的算法.
/**
 * 二分查找法找数字
 *
 * 雲飛揚
 * 2008.4.10
 
*/

#include 
< stdio.h >
#include 
< stdlib.h >
#include 
< time.h >  
/*//*/
#define length 
5
/*//*/
struct num
{
    
int number; /* 数字 */
    
int i; /* 编号指针 */
}
numList[length];

int  find( int  begin,  int  end,  int  number, struct num array[length]);
int  pos;
/*//*/
int  main()
{
    
int number, index, count, m, n, tmp1, tmp2;
    srand((unsigned)time(NULL));

    printf (
"请输入 %d 个数: ", length);

    
for(count = 0;count != length;++count)
    
{
        scanf(
"%6d",&numList[count].number);
        numList[count].i 
= rand() % 100;
    }

    printf (
"你输入的 %d 个数为: ", length);
/*//*/
    
for (m = 0;m != length;++m)
    
{
        
for(n = m;n != length;++n)
        
{
            
if(numList[m].number > numList[n].number)
            
{
                tmp1 
= numList[m].number;
                numList[m].number 
= numList[n].number;
                numList[n].number 
= tmp1;
                tmp2 
= numList[m].i;
                numList[m].i 
= numList[n].i;
                numList[n].i 
= tmp2;
            }

        }

    }

/*//*/
    
for(count = 0;count != length;++count)
    
{
        printf(
"%6d",numList[count].number);
    }

    printf(
"%6 --- 数字 ");
    
for(count = 0;count != length;++count)
    
{
        printf(
"%6d",numList[count].i);
    }

    
    printf (
"%8 --- 编号(随机生成) 请输入你要查找的数 ");

    scanf (
"%d",&number);
    
    index 
= find(0, length - 1, number, numList);

    
if(-1 == index)/* -1 为查找失败 */
    
{
        printf (
"没有找到这个数.");
    }

    
else
    
{
        printf (
"你要查找的数 %d 的编号是 %d. ", number, index);
    }


    
return 0;
}

/*//*/
int  find( int  begin,  int  end,  int  number, struct num array[length])
{
    
while(begin <= end)
    
{
        pos 
= (begin + end) / 2;

        
if(array[pos].number == number)
        
{
            
return array[pos].i;
        }


        
else if(number < array[pos].number)
        
{
            
return find(begin, pos - 1, number, array);
        }

        
else
        
{
            
return find(pos + 1, end, number, array);
        }

    }


    
return -1;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值