程序功能:用二分法查找数字在递增数组中的位置,并打印出来。
/***************************
main.cpp测试二分法查找
***************************/
#include "stdafx.h"
#include "Arr50.h"
int _tmain(int argc, _TCHAR* argv[])
{
CArr50 arr50;
int i = 0;
while(i < 200)
{
arr50.print_position(i++);
}
return 0;
}
/***************************
Arr50.h关于二分法查找
***************************/
#pragma once
class CArr50
{
public:
CArr50(void);
public:
~CArr50(void);
public:
void print_position(int iNum);
private:
int *m_pArr;
};
/***************************
Arr50.cpp关于二分法查找
***************************/
#include "StdAfx.h"
#include "Arr50.h"
#include "iostream"
using namespace std;
const int m_sArr[] = {0, 2, 5, 8, 12, 15, 17, 19, 23, 26, 28, 30, 31, 35, 38, 39, 40, 45, 47, 48, 49, 59, 80, 128, 159, 189, 195};
CArr50::CArr50(void)
{
}
CArr50::~CArr50(void)
{
}
void CArr50::print_position(int iNum)
{
int n = sizeof(m_sArr) / sizeof(int);
int iRight = n - 1;
int iLeft = 0;
while(true)
{
if(iLeft > iRight)
break;
int iMid = (iLeft + iRight) / 2;
if(m_sArr[iMid] == iNum)
{
printf("%3d %3d/n", iNum, iMid);
break;
}
if(m_sArr[iMid] > iNum)
{
iRight = iMid - 1;
}else
{
iLeft = iMid + 1;
}
};
}