二分算法查找数据所在区间索引值的例子
2013-08-10 12:44
399 查看
前段时间写了一个二分算法应用的例子,用于查找数据在表格(数组)中某个区间的索引值,已在CB中测试通过。
以上代码是在CodeBlocks中编写。
/************************************************** ** 文件说明: 二分法查找目标数据所在数组中的位置索引 演示 ** 作者 : foxpro2005 ** 日期 : 2013-03-12 ** QQ : 5894398 **************************************************/ #include <stdio.h> int Table[15]={ 3,9,16,20,26,31,38,42,47,51,58,66,73,87,98 }; /************************************************** ** 函数功能: 二分法查找目标数据所在数组中的位置索引 **************************************************/ int SearchTable(int *pTable, int TabSize, int x) { int mid, btm = 0, top = --TabSize; if(x < pTable[btm + 1]){ // 超出下限,锁定在btm索引值范围 return btm; }else if(x < pTable[top]){ // 在表格范围内 while((top - btm) != 1) // 2分法查找区间 { mid = (btm + top) >> 1; // /2 if(x > pTable[mid]){ btm = mid; } else if(x < pTable[mid]){ top = mid; } else{ return mid; // 正好等于mid位所在值 } } return btm; // 找到一个区间,并返回这个区间的开始索引值(以向下原则) } else{ // 超出上限,锁定在top索引值范围 return top; } } int main(void) { int i,x; for(i=0; i < (sizeof(Table) / sizeof(Table[0])); i++){ if(i==0) printf("Table={%d",Table[i]); else printf(",%d",Table[i]); } printf("}\n"); printf("Enter -1 can be end\n"); while(1){ printf("Please intput a new number: "); scanf("%d",&x); if(x == -1) break; else{ printf("\n%d's index is %d\n",x,SearchTable(Table, (sizeof(Table) / sizeof(Table[0])), x)); } } return -1; }
以上代码是在CodeBlocks中编写。
相关文章推荐
- Java数据结构与算法之【二分查找】
- 【数据结构与算法】二分查找
- 【数据结构与算法】二分查找递归非递归实现
- 二分查找排序数组中指定数所在区间
- 数据结构与算法------二分查找
- 数据结构与算法-二分查找
- 算法学习---基本数据类型的数组二分查找实现
- 【数据结构与算法】二分查找
- 【数据结构与算法】二分查找
- 59.排序好的大数据创建索引文件,并实现大文件的二分查找,根据索引百万数据秒读数据
- 数据结构和算法设计专题之---二分查找(Java版)
- 算法学习---基本数据类型的数组二分查找实现
- java数据结构与算法-递归二分查找
- (算法)二分查找的搜索区间
- 数据结构与算法--查找之顺序查找和二分查找
- 数据结构与算法学习之路:二分查找的非递归和递归算法
- [数据结构与算法] : 二分查找
- 【数据结构与算法】二分查找
- 数据结构与算法14:线性索引查找
- 数据结构与算法-折半查找(二分查找)