二分查找
来源:互联网 发布:淘宝店铺图标制作 编辑:程序博客网 时间:2024/06/04 04:20
1.二分查找的分析
对于查找,今晚上老范将了3中方法,
1.顺序查找(数组和链表),但是顺序表的效率不太稳定,不适合大数据,因为要找key值一般都是从遍历数组出发的,平均查找长度ASL=(1+n)/2,最坏时间的复杂度为O(n^2),对于这个我写过,就不写
2.二分查找,这是先一定要排好序才可以实现,先拿出中间的值a[mid]和key进行比较,比较之后又三种情况啊,相等,大于,小于。等于直接返回么,没有说的;如果大于的话,直接舍弃前一半,即就是下标low到mid的值,并重新赋值low=mid+1,这样大大的提高了查找的效率,这次可以选择递归和非递归实现,反正两个有共同的特点,结束条件,用非递归的话,只要low<=high就行了,用递归,它的结束条件是low比high大了,然后就返回去,其实递归也是我的硬伤,要好好的思考哩。对于这个时间的复杂度就为O(log2 n);
3.散列查找,这次不详细的说了,我会专门弄一个专题来大搞特稿的
2.二分查找的非递归代码
#include<stdio.h>int halfsearch(int a[],int low,int high,int key) //非递归实现 {int mid;while(low<=high) // 结束条件是low>high{mid=(low+high)/2;if(a[mid]==key)return mid;else if(a[mid]<key) //中间值比要查的值小low=mid+1;elsehigh=mid-1;}return -1; //如果没有找到,返回-1}int main(){ int a[10]={1,5,9,15,22,27,33,44,68,97};int low,high,key,mid;low=0; high=10-1; printf("请你输入要查找的值: ");scanf("%d",&key);mid=halfsearch(a,low,high,key);if(mid==-1){ printf("你的输入有误\n");}else printf("你输入%d是第的位置是%d\n",key,mid+1);return 0;}
3.二分查找的递归代码
#include<stdio.h>int halfsearch(int a[],int low,int high,int key) // 用递归实现{int mid;if(low>high) //递归出口return -1;else{ mid=(low+high)/2;if(a[mid]==key) return mid;else if(a[mid]<key)return halfsearch(a,mid+1,high,key);elsereturn halfsearch(a,low,mid-1,key);}}int main(){ int a[10]={1,5,9,15,22,27,33,44,68,97};int low,high,key,mid;low=0; high=10-1; printf("请你输入要查找的值: ");scanf("%d",&key);mid=halfsearch(a,low,high,key);if(mid==-1){ printf("你的输入有误\n");}else printf("你输入%d是第的位置是%d\n",key,mid+1);return 0;}
4.结果演示
0 0
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- Java面试03--Overload和Override的区别详解
- Java IO(一)
- <Android>Application全局变量的使用
- Java中final关键字的几点理解
- 安卓缓存
- 二分查找
- 使用Android Studio时可能会有的几个困惑
- HDOJ题目2138 How many prime numbers(水题)
- [1]VisionVision
- CMake管理工程项目之基础语句
- js性能优化
- 海哥:T2C时代的到来了,那么什么叫T2C?
- 详解java String类型(一)
- Objective-C类的使用