Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1662973
  • 博文数量: 1493
  • 博客积分: 38
  • 博客等级: 民兵
  • 技术积分: 5834
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-19 17:28
文章分类

全部博文(1493)

文章存档

2016年(11)

2015年(38)

2014年(137)

2013年(253)

2012年(1054)

2011年(1)

分类:

2012-05-31 08:49:46

原文地址:二分查找排序 作者: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. }

阅读(466) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~