折半查找主要作用于线性表数据结构查找数据,是查找算法的一种,折半查找在数据量大的表中,能够发挥很大的作用,但是使用折半查找的前提是表数据内容顺序排序。
算法思路:
1、线性表L(这里以升序做参考)、查询元素K、头位置fk、尾位置rk
2、首先在表L的(rk-fk)/2位置对比,如果比K大,则在fk 至 (rk-fk)/2 中再次执行折半查找操作,直到rk==fk结束查找。
当然,如果线性表中不存在查找元素,那么最终fk指向的位置会与rk指向位置一致。
代码参考:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
// 设置最大长度
#define MaxSize 10
// 构建线性表(静态顺序表)
typedef struct List {
// 数据表
int data[MaxSize];
// 存储数据长度
int len;
}List;
// 实例化线性表
void InitList(List* L){
int i = 0;
while (i < MaxSize) {
L->data[i] = 0;
}
L->len = 0;
}
// 折半查找,返回下标
int getList(List* L,int num) {
// 定义左右索引,中间值
int lk = 0, rk = L->len - 1, mid = 0;
while (lk <= rk) {
// 获取中间值
mid = (rk + lk) / 2;
// 比较
if (L->data[mid] == num) {
return mid;
}
else if (L->data[mid] < num){
lk = mid;
}
else if(L->data[mid] > num) {
rk = mid;
}
}
return -1;
}
int main() {
return 0;
}
代码仅供参考,思路比较重要。