#include<stdio.h>#include<stdlib.h>#defineMAXSIZE10#defineNotFound0typedefint ElementType;typedefint Position;typedefstructLNode*List;structLNode{
ElementType Data[MAXSIZE];
Position Last;/* 保存线性表中最后一个元素的位置 */};
List ReadInput();/* 裁判实现,细节不表。元素从下标1开始存储 */
Position BinarySearch( List L, ElementType X );intmain(){
List L;
ElementType X;
Position P;
L =ReadInput();scanf("%d",&X);
P =BinarySearch( L, X );printf("%d\n", P);return0;}/* 你的代码将被嵌在这里 */
输入样例1:
51231558910131
结尾无空行
输出样例1:
2
结尾无空行
输入样例2:
3267823331
输出样例2:
0
AC:
Position BinarySearch(List L, ElementType X){
Position Left, Right, Mid;
Left =1;
Right = L->Last;while(Left <= Right){
Mid =(Left + Right)/2;if(L->Data[Mid]> X)
Right = Mid -1;elseif(L->Data[Mid]< X)
Left = Mid +1;elsereturn Mid;}return NotFound;}
// Left 和 Right 分别是当前要处理的 L->Data[] 中最左和最右的下标值
Position BS(List L,ElementType X,Position Left,Position Right){if(Left > Right)return NotFound;
Position Mid =(Left + Right)/2;if(L->Data[Mid]> X)returnBS(L, X, Left, Mid -1);elseif(L->Data[Mid]< X)returnBS(L, X, Mid +1, Right);elsereturn Mid;}//在顺序存储的表 L中查找关键字为 X的数据元素
Position BinarySearch(List L,ElementType X){returnBS(L, X,1, L->Last);}