首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

待 简单C++代码

2012-03-01 
在线等待 简单C++代码小弟初学算法设计,想用二分搜索技术编一个简单程序给定已排好序的N个元素a[0:n-1],现

在线等待 简单C++代码
小弟初学算法设计,想用二分搜索技术编一个简单程序
给定已排好序的N个元素a[0:n-1],现要在这N个元素中找一个特定的元素x
大虾们帮忙了!!

[解决办法]
假设为升序排列,则二分搜索代码如下:
int i = 0;
int j = n - 1;
while (i < j)
{
if (a[i] == x || a[j] == x)
{
return true;
}
int k = (i + j) / 2;
if (a[k] == x)
{
return true;
}
else if (a[k] < x)
{
j = k;
}
else
{
i = k;
}
}
return false;

[解决办法]
有个地方错了。
把else if (a[k] < x)改成else if (a[k] > x)
[解决办法]
void Half_Search(const int *a, int SIZE, int value, int left, int right)
{
if (left > right || value < a[left] || value > a[right] )
{
cout < < "No Such Data Found! " < < endl < < endl ;
return ;
}

int middle = (left + right)/2 ;// middle pointer

if ( value == a[middle] )
{
while (a[--middle] == value) ;// move the pointer to the front position of the leftest certain data

cout < < "_________________Data Found___________________ " < < endl ;

while (a[++middle] == value && middle < SIZE)// print all the data(the count can be one, two, three...)
cout < < "a[ " < < middle < < "] : " < < a[middle] < < endl ;

cout < < "_________________Data Found___________________ " < < endl ;
}
else if (value < a[middle] )
Half_Search(a, SIZE, value, left, middle-1) ;
else
Half_Search(a, SIZE, value, middle+1, right) ;

}
[解决办法]
main就自己写咯
[解决办法]
#include "memory "
#include "vector "
#include "iostream "

using namespace std;

/*

*/

template <typename T> int search(vector <T> & vArray, T t) {

int _r = static_cast <int> (vArray.size()) - 1;
int _l = 0;

while (_l <= _r) {

int _m = (_r + _l) / 2;

if (vArray[_m] == t)
return _m;

if (vArray[_m] > t)
_r = _m - 1;
else
_l = _m + 1;

}

return -1;
}

int main()
{
vector <int> vArray;
for (int i = 0; i < 100; i++)
vArray.push_back(i);

cout < <search(vArray, 80) < <endl;
cout < <search(vArray, 180) < <endl;
cout < <search(vArray, 25) < <endl;


return 0;
}

热点排行