两种简单查找算法之顺序查找和二分查找
来源:互联网 发布:青岛网络内链优化 编辑:程序博客网 时间:2024/05/16 12:19
查找对于计算机编程来说是非常常见的功能。对于当今的大信息数据时代,计算机对于查找的性能又有了新的挑战,如何设计一个高效的查询,对于系统的性能有着举足轻重的影响。下面我们就来看下最简单的两种查找算法。
顺序查找称得上是最简单的查找算法,其算法思想也比较简单。就是线性表的一段开始,依次将线性表中的数据拿来与需要查找的关键字比较,如果线性表中某个记录的关键字等于给定值,那么查找成功;如果线性表已经遍历完了,还没有查找到对应记录的话,则查找失败。
顺序查找的思路很简单,下面给出c语言的代码形式:
上面的代码很简单。但是他有一定的好处,就是对查找表中的顺序是没有限制的;但是坏处也很明显,因为都要依次给查找表中的数据做对比,所以最坏情况下查找成功需要进行n次比较。数据量大的时候,绝对是不可能考虑的查找算法。
上面看完了顺序查找,下面再来看一下二分查找。二分查找的思路也比较简单,但是它有一个限制,就是查找表必须是一个顺序集合。二分查找的总体思路是,先拿查找表中的一个中间元素与被查找值进行比较,这里可能有三种情况:
1.中间元素恰好等于了被查找值,这时查找成功。
2.中间元素的值小于被查找值,则让它在查找表的后半部分继续进行二分查找。
3.中间元素的值大于被查找值,则让它在查找表的前半部分继续进行二分查找。
如果进行到最后,还没有找到被查找元素的话,那么这次证明查找表中没有被查找的元素,则查找失败。
二分查找在本质上类似于递归的过程,就是在大的方向找不到的话就去小的方向找,直到末尾。下面给出二分查找的代码:
可以看到如果查找表是顺序的话,二分查找的效率上比顺序查找会有一定的提升。其平均算法复杂度o(nlogn)。二分查找在很多地方都有实际应用的情况,比如mysql数据库中在leaf page页上查找数据的时候就用了二分查找法。
顺序查找称得上是最简单的查找算法,其算法思想也比较简单。就是线性表的一段开始,依次将线性表中的数据拿来与需要查找的关键字比较,如果线性表中某个记录的关键字等于给定值,那么查找成功;如果线性表已经遍历完了,还没有查找到对应记录的话,则查找失败。
顺序查找的思路很简单,下面给出c语言的代码形式:
# include <stdio.h>int seqSearch(int * arr,int n,int num);int main(void){ int arr[10] = {3,8,6,13,22,17,5,9,30,27}; int num = 17; int result; result = seqSearch(arr,10,num); if(result >= 0){ printf("查找成功,查找关键字对应的key是%d:",result); }else{ printf("查找失败!"); } return 0;}//顺序查找代码的实现int seqSearch(int * arr,int n,int num){ int i; for(i=0;i<n;i++){ if(arr[i] == num){ return i; break; } } return -1;}
上面的代码很简单。但是他有一定的好处,就是对查找表中的顺序是没有限制的;但是坏处也很明显,因为都要依次给查找表中的数据做对比,所以最坏情况下查找成功需要进行n次比较。数据量大的时候,绝对是不可能考虑的查找算法。
上面看完了顺序查找,下面再来看一下二分查找。二分查找的思路也比较简单,但是它有一个限制,就是查找表必须是一个顺序集合。二分查找的总体思路是,先拿查找表中的一个中间元素与被查找值进行比较,这里可能有三种情况:
1.中间元素恰好等于了被查找值,这时查找成功。
2.中间元素的值小于被查找值,则让它在查找表的后半部分继续进行二分查找。
3.中间元素的值大于被查找值,则让它在查找表的前半部分继续进行二分查找。
如果进行到最后,还没有找到被查找元素的话,那么这次证明查找表中没有被查找的元素,则查找失败。
二分查找在本质上类似于递归的过程,就是在大的方向找不到的话就去小的方向找,直到末尾。下面给出二分查找的代码:
# include <stdio.h>int binarySearch(int * arr,int n,int num);int main(void){ int arr[10] = {3,5,6,8,9,13,17,22,27,30}; int num = 6; int result; result = binarySearch(arr,10,num); if(result >= 0){ printf("查找成功,查找关键字对应的key是%d:",result); }else{ printf("查找失败!"); } return 0;}//二分查找主要实现代码int binarySearch(int * arr,int n,int num){ int min = 0; int max = n-1; int mid; while(min<=max){ mid = (min+max)/2; if(arr[mid] > num){ max = mid-1; }else if(arr[mid] < num){ min = mid+1; }else{ return mid; } } return -1;}
可以看到如果查找表是顺序的话,二分查找的效率上比顺序查找会有一定的提升。其平均算法复杂度o(nlogn)。二分查找在很多地方都有实际应用的情况,比如mysql数据库中在leaf page页上查找数据的时候就用了二分查找法。
- 两种简单查找算法之顺序查找和二分查找
- 查找算法之顺序查找和二分查找
- 查找算法系列之简单查找:顺序查找、二分查找、分块查找
- 顺序查找算法和二分查找算法
- 顺序查找和二分查找算法
- 搜索算法-顺序查找和二分查找
- PHP算法之二分查找和顺序查找
- 查找算法一之顺序查找 二分查找
- 【数据结构】查找算法:二分查找、顺序查找
- 查找算法:二分查找、顺序查找
- 顺序查找和二分查找
- 二分查找和顺序查找
- 顺序查找和二分查找
- 顺序查找和二分查找
- 顺序查找和二分查找
- 查找系列之简述顺序查找和二分查找
- (五)数据结构之静态查找的简单实现:顺序查找和二分查找
- 算法基础之查找——顺序查找和二分查找
- POJ 3669 - Meteor Shower(广搜)
- 一道极其有难度的算法题!!!
- unity3d 动态加载 prefab
- linux 将域名解析成IP地址
- 人生感悟 from cnblogs
- 两种简单查找算法之顺序查找和二分查找
- hdu 2734 Quicksum
- HDU 1556 Color the ball ( 线段树+普通数组+树状数组)
- CListCtrl样式设置
- POJ 2429 GCD & LCM Inverse Pollard_rho大数因子分解
- ubantu的网络禁用
- 深入理解C++中的mutable关键字
- 关于fatfs初始化
- 如何不用密码 ssh登陆服务器