这道题相对而言比较简单,是第一周的函数题
问题就是在一个有序数组里面,用二分法的方法找到对应数据
为了加快二分法的效率,在函数体前面加两个判断语句,分别判断左右端的数字,以减少时间浪费
代码如下:
#define NotFound 0
typedef int ElementType;
typedef int Position;
typedef struct LNode *List;
struct LNode {
ElementType Data[MAXSIZE];
Position Last; /* 保存线性表中最后一个元素的位置 */
};
Position BinarySearch( List L, ElementType X ) {
int left = 1; //取第一个位(该数组是由下标1开始的)
int right = L->Last; //取最后一位
int mid;
if(X > L->Data[L->Last]) //判断寻找的数是否大过最后的数字
return NotFound;
if(X == L->Data[1]) //判断第一个是不是要寻找的数字
return 1;
//二分法
while(left <= right) {
mid = (left + right)/2;//取中值
if(L->Data[mid] == X) {
return mid;
} else if (X < L->Data[mid]) {//小的区域里找
right = mid - 1;
} else { //大的区域里找
left = mid + 1;
}
}
return NotFound;
}
其他代码就不多赘余展示出来了,继续加油!