编程之美--二分查找算法
来源:互联网 发布:壮语 泰语 知乎 编辑:程序博客网 时间:2024/04/29 12:32
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
int search4(int array[], int n, int v){ int left, right, middle; left = -1, right = n; while (left + 1 != right)//这个循环维持的条件是left<right && array[left]<v<=array[right],所以到最后的时候, {//如果可以找到目标,则只剩下两个数,并且满足 array[left]<v<=array[right],是要查找的数是right middle = left + (right - left) / 2; if (array[middle] < v)//必须保证array[left]<v<=array[right],所以left = middle; {//如果left =middle+1,则有可能出现 array[left]<=v的情况 left = middle; } else { right = middle; } } if (right >= n || array[right] != v) { right = -1; } return right;}
可以用下面的算法,可以找出满足条件的数。
- int Bi_Search(int a[],int n,int b)//
- {//返回等于b的第一个
- if(n==0)
- return -1;
- int low = 0;
- int high = n-1;
- int last = -1;//用last记录上一次满足条件的下标
- while (low<=high)
- {
- int mid = low +(high-low)/2;
- if (a[mid]==b)
- {
- last = mid;
- high = mid -1;
- }
- else if(a[mid]>b)
- high = mid -1;
- else
- low = mid +1;
- }
- return last;
- }
- int Bi_Search1(int a[],int n,int b)//大于b的第一个数
- {
- if(n<=0)
- return -1;
- int last = -1;
- int low = 0;
- int high = n-1;
- while (low<=high)
- {
- int mid = low +(high - low)/2;
- if(a[mid]>b)
- {
- last = mid;
- high = mid -1;
- }
- else if (a[mid]<=b)
- {
- low =mid +1;
- }
- }
- return last;
- }
0 0
- 编程之美--二分查找算法
- 编程之美:二分查找
- 编程之美之二分查找总结
- 编程之美-二分查找练习题
- 编程之美3.11 二分查找常见问题
- 编程之美3.11 二分查找
- 编程之美 3.11二分查找系列
- 二分查找之美
- 编程之美系列之关于数组的二分查找
- 《代码之美》读书笔记之二分查找算法
- 二分查找 编程之美3.11 程序改错
- 二分查找 递归与非递归 编程之美写法
- 编程算法之数组二分查找法
- 二分查找 -- 代码之美
- 算法之二分查找
- 算法之二分查找
- 算法之二分查找
- 查找算法之二分查找
- 计算几何的模板
- Hibernate与iBATIS的比较
- FTP常用命令
- 2.1.18 Climbing Stairs
- Linux常用性能调优工具索引
- 编程之美--二分查找算法
- xib与nib的区别
- OCP 1Z0 053 253
- java中的HashMap与HashTable
- jgjgjcgjh
- 使用opensl 的BufferQueueAudioPlayer对wav文件的播放
- ZooKeeper Watcher执行顺序 ********************
- poj 1503 Integer Inquiry(多个大数相加)
- LeetCode Solutions : Search in Rotated Sorted Array