数据结构与算法学习之路:二分查找的非递归和递归算法
来源:互联网 发布:哪些网游国服有mac版 编辑:程序博客网 时间:2024/06/05 18:18
一、何为二分查找?
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
二分查找的基本思想是:在有序序列中,通过与序列段中间的数作比较,减少多余的比较(例如key<mid,则在start和mid-1之间查找,反之在mid+1和end之间查找)
二、具体代码实现:
(本代码段并没有考虑溢出、low,high大小超出数据类型等等情况,有兴趣的读者可以自行搜索相关内容或者参考书籍了解)
#include <stdio.h>#include <stdlib.h>#define SUCESS 1#define FALSE 0#define MAXSIZE 10int Binary_Search_Version1(int *test, int start, int end, int key);int Binary_Search_Version2(int *test, int start, int end, int key);int main(){int test[MAXSIZE] = { 1, 9, 22, 26, 34, 49, 52, 63, 78, 89 };int search;printf("请输入要查找地数:\t");scanf("%d", &search);if (Binary_Search_Version1(test, 0, MAXSIZE - 1, search))printf("\n找到了.\n");elseprintf("没找到\n");if (Binary_Search_Version2(test, 0, MAXSIZE - 1, search))printf("\n找到了.\n");elseprintf("没找到\n");}//递归算法int Binary_Search_Version1(int *test, int start, int end, int key){int mid, low = start, high = end;if (low > high)return FALSE;mid = (low + high) / 2;if (key == test[mid])return SUCESS;else if (key < test[mid])Binary_Search_Version1(test, low, mid - 1, key);elseBinary_Search_Version1(test, mid + 1, high, key);}//非递归算法int Binary_Search_Version2(int *test, int start, int end, int key){int mid, low = start, high = end;while (low <= high){mid = (low + high) / 2;if (key == test[mid])return SUCESS;else if (key < test[mid]){high = --mid;}elsestart = ++mid;}return FALSE;}
0 0
- 数据结构与算法学习之路:二分查找的非递归和递归算法
- 【数据结构与算法】二分查找递归非递归实现
- 算法(第四版)学习笔记之二分查找的递归与非递归java实现
- 二分查找递归与非递归算法
- 二分查找算法 递归和非递归
- 二分查找的递归与1非递归算法
- 二分查找的递归与非递归算法
- 二分查找算法的递归与非递归实现
- 二分查找的非递归与递归算法
- 二分查找算法的递归与非递归实现
- 算法_二分查找的递归和非递归形式
- 斐波那契数列和二分查找的算法(递归与非递归)
- java数据结构与算法-递归二分查找
- 《数据结构与算法》学习笔记19 递归_二分查找
- 二分查找算法(递归与非递归实现)
- 二分查找算法-递归-非递归实现
- 二分查找算法----递归&&非递归
- 数据结构与算法 —— 二分查找的递归方式
- C++ Primer再读笔记-1
- Cocos2d-x优化中多线程并发访问
- HDU 5095 Linearization of the kernel functions in SVM(模拟, 水题)
- js 遍历 object 属性和值的方法
- 第11周 项目6-5 输出1000以内的所有回文数
- 数据结构与算法学习之路:二分查找的非递归和递归算法
- HDU 5090 Game with Pearls(贪心, 二部图最大匹配)
- Servlet JSP 二重修炼:Filter过滤器
- CC2540 DMA学习
- 设计模式原则详解
- 在处理URL时对中文的转码过程
- win7 java环境变量设置
- ubuntu 12.04 samba
- Yacc 与 Lex 快速入门(词法分析和语法分析)