Chinaunix首页 | 论坛 | 博客
  • 博客访问: 189759
  • 博文数量: 46
  • 博客积分: 1355
  • 博客等级: 中尉
  • 技术积分: 336
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-02 16:20
文章分类

全部博文(46)

文章存档

2017年(2)

2014年(12)

2012年(1)

2011年(5)

2010年(26)

我的朋友

分类: C/C++

2014-07-28 23:24:38

原文地址:二分查找排序 作者:hfm_honey

首先对查找的列表有两个要求:(1)、必须采用顺序存储结构(2)、必须按关键大小有序排列
算法思想:首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等则查找成功,否则利用中间位置记录将表分成前后两个字表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
重复上述过程,知道找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
测试程序如下所示:

点击(此处)折叠或打开

  1. #include<stdio.h>
  2. int Find(int a[],int x,int length)
  3. {
  4.     int low,high;
  5.     int mid;
  6.     low=1,high=length;
  7.     while(low<=high)
  8.     {
  9.         mid=(low high)/2;
  10.         if(x==a[mid])
  11.             return mid;
  12.         else if(x>a[mid])
  13.             low=mid 1;
  14.         else
  15.             high=mid-1;
  16.     }
  17.     return 0;
  18.     
  19. }
  20. int main()
  21. {
  22.     int length;
  23.     int i,x;
  24.     int flag;
  25.     int a[100];
  26.     printf("请输入元素的个数: ");
  27.     scanf("%d",&length);
  28.     printf("请输入元素(输入的元素必须是有序序列,此例中是降序序列): \n");
  29.     for(i=1;i<=length;i )
  30.         scanf("%d",&a[i]);
  31.     printf("请输入要查找的元素: ");
  32.     scanf("%d",&x);
  33.     flag=Find(a,x,length);
  34.     if(flag)
  35.         printf("要查找的数据是数组中第%d个元素\n",flag);
  36.     else
  37.         printf("没有找到要找的数\n");
  38. }

阅读(2106) | 评论(0) | 转发(0) |
0

上一篇:内存区划分

下一篇:TCP、UDP、IP 协议分析

给主人留下些什么吧!~~