编程珠玑的二分法
来源:互联网 发布:ubuntu wine 配置 编辑:程序博客网 时间:2024/05/20 23:39
二分法,究其根本就是在已经排好序的基础上进行的数据查找,该方法具有较高的效率,特别好用
// 进化的二分法.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>using namespace std;template<class Any>int Find_By_Binary(Any* ptr ,int nLength,Any value){int low=0,high=nLength-1;int middle=(low+high)/2;while(low<=high){if(value<ptr[middle]){high=middle-1;}else if(value==ptr[middle]){return middle;}else{low=middle+1;}middle=(low+high)/2;}return -1;}int _tmain(int argc, _TCHAR* argv[]){int ptr[5]={2,3,5,8,9};cout<<Find_By_Binary(ptr,5,5)<<endl;double dptr[5]={2.2,5.6,5.7,6.3,8.2};cout<<Find_By_Binary(dptr,5,5.9)<<endl;return 0;}
如果提高一下难度呢?因为我们不知道获得的数据是第一个,或者说根本不了解所获取数据的位置,可以说是随机的,如果我们想要得到的是第一个,或者是最后一个呢???
不要着急,我们分别来说下,首先呢,是获取特定数据第一次出现的位置其原理就是记录每次该值出现的位置,一直到最后一次,,如果某值出现,那么向下查找,因为我们找的是第一次出现的啊,假定该位置一定不是第一次出现,那么向前查找,就是将high=middle-1;即可如果是最后一次出现的呢,就是不断向后查找将low=middle+1;即可
代码如下
// 进化的二分法.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>using namespace std;template<class Any>int getFirstBinarySearch(Any* ptr ,int nLength,Any value){int low=0,high=nLength-1;int middle=(low+high)/2;int nPos=-1;while(low<=high){if(value<ptr[middle]){high=middle-1;}else if(value==ptr[middle]){nPos=middle;high=middle-1;}else{low=middle+1;}middle=(low+high)/2;}return nPos;}template<class Any>int getLastBinarySearch(Any* ptr ,int nLength,Any value){int low=0,high=nLength-1;int middle=(low+high)/2;int nPos=-1;while(low<=high){if(value<ptr[middle]){high=middle-1;}else if(value==ptr[middle]){nPos=middle;low=middle+1;;}else{low=middle+1;}middle=(low+high)/2;}return nPos;}int _tmain(int argc, _TCHAR* argv[]){int ptr[8]={2,3,5,8,9,9,9,10};cout<<"第一次出现的位置是"<<getFirstBinarySearch(ptr,8,9)<<endl;cout<<"最后一次出现的位置是"<<getLastBinarySearch(ptr,8,9)<<endl;return 0;}
谢谢
0 0
- 编程珠玑的二分法
- 编程珠玑的一些笔记
- 编程珠玑的一些笔记
- 《编程珠玑》
- 编程珠玑
- 编程珠玑
- 编程珠玑
- 编程珠玑
- 编程珠玑
- 编程珠玑
- 编程珠玑
- 编程珠玑
- 编程珠玑
- 三个版本的插入排序 - 编程珠玑
- 关于编程珠玑第一章的体会
- 编程珠玑第二章的算法实现
- 两个日期之间的天数--【编程珠玑】
- 编程珠玑:变位词程序的实现
- Linux权限小记
- 一道题目
- Opencv-图像金字塔
- 逗B小朋友的冷幽默
- AspectJ的切点函数execution步骤介绍
- 编程珠玑的二分法
- opencv实践程序3——打开摄像头视频及轮廓检测的简单程序
- 换个环境研究
- 和规范交换机
- jqueryMobile 动态添加元素,展示刷新视图方法
- 我们需要的产品经理
- Spring AOP execution 突破点表达式
- 规范的合格
- 茶叶蛋---土豪身份的新象征