有序的静态查找表的折半(二分)查找算法
2013-05-07 22:13
274 查看
/*折半查找(二分查找) 解题步骤: 1.将有序表(升序)存储在数组中。 2.定义三个指针low,high,mid。起初指针low指向了数组的首元素,指针high指向 数组的最后一个元素,指针mid指向low+(high-low)/2元素的地址。 下述分析情况: 0,1,2,3,4,5,6,7,8,9,10 奇数个数的情况: m所指向的元素的两边的元素相等 l m h h-1/2=5 l+5=5 0,1,2,3,4,5,6,7,8,9 偶数个数的情况:m所指向的元素的右边的元素的个数比左边的元素的个数多一个 l m h h-l/2=4; l+4=4 3.将mid所指向的元素的值和要查找的元素的值key(key为可唯一标识一条记录的关键字)比较,若相等, mid所指向的元素的为要查找的记录,若mid所指向的元素的值大于key,故可得出 推论key元素在mid所指向的元素的左边,因此,将指针high指向指针mid-1指向的位置, 令指针mid指向low+(high-low)/2所指向的位置,若若mid所指向的元素的值小于key,故可得出 推论key元素在mid所指向的元素的右边,因此,将指针low指向指针mid+1指向的位置,令指针mid指向 low+(high-low)/2所指向的位置。 4重复3,直到low和mid指向的位置相等时,若mid所指向的元素的值不等于key可知道不存在查找的记录 */ #include <stdio.h> #define LEN 11 int * search(int *ptr,int size,int key); int main(void) { int arr[LEN]={5,13,19,21,37,56,64,75,80,88,92}; if(search(arr,LEN,92)==NULL) printf("no record\n"); else printf("%d\n",*search(arr,LEN,92)); return 0; } //将指针high指向指针mid-1指向的位置 int * search(int *ptr,int size,int key) { int *low,*high,*mid; low=ptr; high=ptr+size-1; mid=low+(high-low)/2; while(low<=high) { if(*mid==key) return mid; else if(*mid>key) { high=mid-1; mid=low+(high-low)/2;//high+low 指针的相加是不允许的因此mid=(high+low)/2错误表示方法 } else { low=mid+1; mid=low+(high-low)/2;//词句重复出现两句,因此可将其放到return mid;语句之后 } } return NULL; } /*将指针high指向指针mid指向的位置的情况 int * search(int *ptr,int size,int key) { int *low,*high,*mid; low=ptr; high=ptr+size-1; mid=low+(high-low)/2; do { if(*mid==key) return mid; else if(*mid>key) { high=mid; mid=low+(high-low)/2; } else { low=mid; mid=low+(high-low)/2; } if(*mid==key) return mid; }while(mid!=low); if(*high==key) return high; return NULL; } */
相关文章推荐
- 三种静态查找算法:顺序、二分/折半、索引/分块查找
- 2. C#数据结构与算法 -- 查找算法(顺序查找,哈希查找,二分查找(折半),索引,二叉)
- 查找算法总结之顺序查找、二分查找、静态树查找
- 查找算法整理(一)---静态查找表:顺序表查找、折半(判定树)查找、静态查找树
- 静态表查找--顺序表的查找(有序)--折半查找
- Java有序表查找:折半查找、二分查找、差值查找和斐波那契查找
- 查找算法总结之顺序查找、二分查找、静态树查找
- 数据结构编程笔记二十四:第九章 查找 顺序表和有序表(静态查找表)查找算法的实现
- 有序查找算法(二分查找、差值查找、斐波那契查找)
- PHP有序表查找----二分查找(折半)
- 算法学习之查找算法:静态查找表(2)有序表查找
- 查找算法 分享2:折半(二分)查找
- 查找算法:二分查找算法
- PHP有序表查找之插值查找算法示例
- 静态查找方法(顺序查找与二分查找)
- 循环有序数组/旋转数组的二分查找
- 查找算法_二分查找
- 有序表查询之一:java实现整型数组二分查找
- 非有序的静态查找表的查找某个元素的算法
- 二分法实现一个整形有序数组的二分查找