数据结构与算法-二分查找
2018-03-21 19:32
513 查看
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x < a[n/2],则只要在数组a的左半部分继续搜索x,如果x > a[n/2],则只要在数组a的右半部搜索x.
时间复杂度可以表示O(h)=O(log2n)
基于循环的代码:
基于递归的代码:
二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x < a[n/2],则只要在数组a的左半部分继续搜索x,如果x > a[n/2],则只要在数组a的右半部搜索x.
时间复杂度可以表示O(h)=O(log2n)
基于循环的代码:
int BinarySearch_Recurrence(int sort_array[], int n, int target){ int begin = 0; int end = n - 1; while (begin <= end){ int mid = (begin + end) / 2; if (target == sort_array[mid]) return 1; else if(target < sort_array[mid]){ end = mid - 1; } else if(target > sort_array[mid]){ begin = mid + 1; } } return 0; }
基于递归的代码:
int BinarySearch_Recursive(int sort_array[], int begin, int end, int target){ if (begin > end){ return 0; } int mid = (begin + end) / 2; if (target == sort_array[mid]){ return 1; } else if (target < sort_array[mid]){ return BinarySearch_Recursive(sort_array, begin, mid - 1, target); } else if (target > sort_array[mid]){ return BinarySearch_Recursive(sort_array, mid + 1, end, target); } }
相关文章推荐
- java数据结构与算法-递归二分查找
- 【数据结构与算法】二分查找递归非递归实现
- 数据结构与算法-折半查找(二分查找)
- 数据结构与算法题目集(中文)4-10 二分查找 (20分)
- 【数据结构与算法】二分查找
- 【数据结构与算法】二分查找
- 数据结构与算法-二分查找
- C 数据结构与算法 二分查找
- 【数据结构与算法】二分查找
- 【数据结构与算法】【查找】折半查找(二分查找)的代码实现
- 数据结构和算法设计专题之---二分查找(Java版)
- 数据结构与算法学习之路:二分查找的非递归和递归算法
- [数据结构与算法] : 二分查找
- Java数据结构与算法之【二分查找】
- 数据结构与算法------二分查找
- 【数据结构与算法之查找算法二】二分查找
- 数据结构与算法--查找之顺序查找和二分查找
- 【数据结构与算法】二分查找
- 数据结构实验之查找四:二分查找
- 数据结构基础(2) --顺序查找 & 二分查找