二分查找算法和二分查找函数bsearch
来源:互联网 发布:淘宝互联 编辑:程序博客网 时间:2024/05/17 07:08
二分查找时在给定已按升序排好序的n个元素a[0:n-1], 用折半查找法在从这n个元素中找出一特定元素x,时间复杂性为O(logn)。
具体实现如下:
//二分查找static int binarySearch(int []a, int x, int n){ int left = 0,right = n-1; int middle; while (left <= right) { middle = (left+right)/2; if (x == a[middle]) return middle; if (x > a[middle]) left = middle + 1; else right = middle - 1; } return -1;}
二分查找函数:
void *bsearch(const void *key, const void *base, size_t nmem, size_t size, int (*comp)(cosnt void *, const void *))
key指向所要查找的元素,base指向进行查找的数组,nmem为查找长度,一般为数组长度,size为每个元素所占的字节数,一般用sizeof(...)表示,comp指向比较子函数,它定义比较的规则。
在用bsearch函数之前,必须对数组进行排序。那么用qsort比较方便。
void qsort(void *base, int nelem, int width,int (*comp)(const void*, const void *))
具体实现如下:
//void *bsearch(const void *key, const void *base, size_t nmem, size_t size, int (*comp)(cosnt void *, const void *))//void qsort(void *base, int nelem, int width,int (*comp)(const void*, const void *))#include <stdio.h>#include <stdlib.h>int cmp(const void *a, const void *b);int main(){ int values[]= {12,6,89,10,23}; int key = 10; int i, *p; qsort(values,5,sizeof(int),cmp); for (i = 0; i < 5; i++) { printf("%d ",values[i]); } printf("\n"); p = bsearch(&key,values,5,sizeof(int),cmp); if(p == NULL) printf("NULL\n"); else printf("FOUND! %d\n",*p); return 0;}int cmp(const void *a, const void *b){ return *(int *)a - *(int *)b;}
0 0
- 二分查找算法和二分查找函数bsearch
- bsearch()函数(二分查找)
- bsearch—二分查找
- 快速排序qsort()函数和二分查找bsearch()函数
- Linux内核中的bsearch二分查找函数
- C/C++ 库函数 二分查找 bsearch
- 二分查找bsearch.c源码分析
- 查找算法 二分查找
- 查找算法:二分查找
- 算法--查找--二分查找
- 查找算法---二分查找
- 顺序查找算法和二分查找算法
- 普通查找算法和二分查找算法
- 二分查找和排序算法
- 顺序查找和二分查找算法
- 搜索算法-顺序查找和二分查找
- 查找算法:二分查找算法
- [算法]二分查找算法
- ENVI5.1无缝镶嵌工具
- GRE写作词汇:数量词
- 1.Lua 环境搭建
- iOS开发--@property属性的使用
- 快速理解VirtualBox的四种网络连接方式
- 二分查找算法和二分查找函数bsearch
- 基础学习-工作
- 【POJ 3259】Wormholes
- 利用R语言对RNA-Seq进行探索分析与差异表达分析
- 第六单元
- Android 事件冒泡及捕获
- 超实用SAT阅读方法
- ENVI5.1中Landsat 8数据大气校正
- Android ActionBar上不显示icon的问题