实现功能描述如下:
- 自定义一个通用的数据结构,可定义 u8 u16 u32 float 等多种数据类型,参考C通用库的
qsort
函数- 若数组有序,直接调用接口实现二分查找
- 可实现单个数据有序插入数组,并查找
- 可实现数组中数据的删除
C语言标准库函数qsort(快速排序函数)
目录
- 1. 二分查找算法原理
- 2.函数接口
- 3.代码实现
- 4. 接口使用
1. 二分查找算法原理
不做介绍
2.函数接口
/* === Binary Search ====== Binary Search ====== Binary Search === */
/* === Binary Search ====== Binary Search ====== Binary Search === */
/* === Binary Search ====== Binary Search ====== Binary Search === */typedef struct {uint16_t curNum; // 数组的长度uint16_t elemSize; // 数据数据类型的大小,u8=1 u16=2 u32=4void *elemArr; // 指向数组地址/*** return as follows,用户提供* < 0 when *elemPtr1 < *elemPtr2* = 0 when *elemPtr1 == *elemPtr2* > 0 when *elemPtr1 > *elemPtr2*/int16_t (*compare)(const void *elemPtr1, const void *elemPtr2);
} BinarySearch_T;// 以下三个函数接口返回值
// 成功:返回 数组索引 失败:返回 0xffff
uint16_t BinSch_GetPos(const void *elem, const BinarySearch_T *info); // 获取元素在数组中的位置
uint16_t BinSch_InsertElem(const void *elem, BinarySearch_T *info) ; // 数组中升序插入元素
uint16_t BinSch_DeleteElem(const void *elem, BinarySearch_T *info) ; // 数组中删除元素void con_test_binary_search(); // 测试函数
3.代码实现
// 获取元素在数组中索引号
static uint16_t BinSch_GetRawPos(const void *elem, const BinarySearch_T *info) {uint16_t Lpos = 0U, Rpos = info->curNum, len = info->curNum;uint16_t Mpos = Lpos + (uint16_t)((Rpos - Lpos) >> 1U)