数据结构-折半查找

321 阅读1分钟

折半查找主要作用于线性表数据结构查找数据,是查找算法的一种,折半查找在数据量大的表中,能够发挥很大的作用,但是使用折半查找的前提是表数据内容顺序排序。

算法思路:

1、线性表L(这里以升序做参考)、查询元素K、头位置fk、尾位置rk

2、首先在表L的(rk-fk)/2位置对比,如果比K大,则在fk 至 (rk-fk)/2 中再次执行折半查找操作,直到rk==fk结束查找。

image.png 当然,如果线性表中不存在查找元素,那么最终fk指向的位置会与rk指向位置一致。

image.png

代码参考:

#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;
}

代码仅供参考,思路比较重要。