二分查找(折半查找)
2013-09-04 19:21
375 查看
二分查找又称折半查找,前提要求数据序列呈现线性结构,即必须是经过排序的。
基本思路:
在一组有序序列中,取中间值与给定关键字进行比较,如果给定关键字大于该值关键字,则要查找的关键字位于有序序列的后半部分;若给定小于该值,则要查找的关键字位于有序序列的前半部分。每次将有序序列的长度缩小一半之后,再从中间位置的记录进行比较,依次反复进行。
查找过程如下:
1、查找初始化为low=1、high=length。其中low和high是两个位置指示器,分别指向当前序列的第一个和最后一个值;
2、对当前有序序列做如下处理:
(1)求当前序列的中间位置:mid=(low+length)/2,mid为中间值的位置指示器;
(2)将要查找的查询关键字与mid指示的值进行比较。若相等,查找结束,返回中间位置的值mid;若大于该值,则将查找范围缩短为该序列的后半部分,此时改变low=mid+1,而high值不变;若小于该值,则将查找范围缩短为该序列的前半部分,此时改变high=mid-1,而low值不变。
(3)重复执行过程(2)直至找到待查关键字,返回此值的位置mid,否则返回0。
结果显示:
基本思路:
在一组有序序列中,取中间值与给定关键字进行比较,如果给定关键字大于该值关键字,则要查找的关键字位于有序序列的后半部分;若给定小于该值,则要查找的关键字位于有序序列的前半部分。每次将有序序列的长度缩小一半之后,再从中间位置的记录进行比较,依次反复进行。
查找过程如下:
1、查找初始化为low=1、high=length。其中low和high是两个位置指示器,分别指向当前序列的第一个和最后一个值;
2、对当前有序序列做如下处理:
(1)求当前序列的中间位置:mid=(low+length)/2,mid为中间值的位置指示器;
(2)将要查找的查询关键字与mid指示的值进行比较。若相等,查找结束,返回中间位置的值mid;若大于该值,则将查找范围缩短为该序列的后半部分,此时改变low=mid+1,而high值不变;若小于该值,则将查找范围缩短为该序列的前半部分,此时改变high=mid-1,而low值不变。
(3)重复执行过程(2)直至找到待查关键字,返回此值的位置mid,否则返回0。
#include<stdio.h> #include<stdlib.h> #define max_len 20 typedef struct { int key; char data; }Record; typedef struct { Record r[max_len+1]; int length; }seqTable; int BinarySearch(seqTable st,int k) { int low,high,mid; low=1; high=st.length; while(low<=high) { mid=(low+high)/2; if(st.r[mid].key<k) low=mid+1; else { if(st.r[mid].key>k) high=mid-1; else break; } } if(low>high) return 0; else return mid; } void main() { seqTable st; int i; int len; //定义变量为线性表的长度 int ch; //定义变量为线性表的输入参数 int kk; //定义变量为查询关键字 int res; //定义变量为查找函数返回值 printf("二分查找演示操作!\n"); printf("输入线性表的长度:"); scanf("%d",&len); st.length=len; printf("输入%d个记录的关键字值(用空格隔开):\n",len); for(i=1;i<=len;i++) { scanf(" %d",&ch); st.r[i].key=ch; } printf("输入查询关键字:"); scanf("%d",&kk); res=BinarySearch(st,kk); if(res==0) printf("该查找表中不存在此记录!\n"); else printf("该记录位于该查找表中的第%d个!",res); printf("\n"); system("pause"); }
结果显示:
相关文章推荐
- 二分查找(折半查找)
- 二分查找(折半查找)
- 折半查找 (二分查找)
- 二分查找(折半查找)
- 二分查找(折半查找)
- C/C++查找之一(顺序查找、折半查找(二分查找))
- 二分查找(折半查找)
- 二分查找(折半查找) -- 已排序序列的查找算法
- 折半查找(二分查找)实现
- 二分查找(折半查找)
- 【java基础知识(难点攻克)】--数组元素二分查找(折半查找)
- 二分查找(折半查找)与冒泡排序(C语言)
- 二分查找(折半查找)
- 二分查找(折半查找)
- 二分查找(折半查找)
- 二分查找(折半查找),Java实现
- 二分查找(折半查找)算法及代码
- <数据结构与算法>二分查找(折半查找)
- PHP 顺序查找和二分查找(也叫做折半查找)算法
- 算法:二分查找(折半查找)