查找算法
针对数组容器查找算法
对无序数组
顺序查找
- 算法实现
template <typename T>
T* Helper::SequenceFind(
T* pStart_,
T* pEnd_,
const T &value_)
{
T* _pTemp = pStart_;
while (_pTemp != pEnd_)
{
if (*_pTemp == value_)
{
return _pTemp;
}
_pTemp++;
}
return nullptr;
}
- 时间复杂度:
设数组规模n
时间复杂度
对有序数组
二分查找
- 算法实现
template <typename T,
Helper::SORTTYPE FindSortType>
T* Helper::BinaryFind(
T* pStart_,
T* pEnd_,
const T &value_)
{
int _nNum = (pEnd_ - pStart_);
if (_nNum < 1)
{
return nullptr;
}
if (_nNum == 1)
{
if (*pStart_ == value_)
{
return pStart_;
}
else
{
return nullptr;
}
}
T* _pMid = pStart_ + _nNum / 2;
if (*_pMid == value_)
{
return _pMid;
}
else if (*_pMid < value_)
{
if (FindSortType == SORTTYPE::ASCENDING)
{
return BinaryFind<T, FindSortType>(_pMid + 1, pEnd_, value_);
}
else
{
return BinaryFind<T, FindSortType>(pStart_, _pMid, value_);
}
}
else
{
if (FindSortType == SORTTYPE::ASCENDING)
{
return BinaryFind<T, FindSortType>(pStart_, _pMid, value_);
}
else
{
return BinaryFind<T, FindSortType>(_pMid + 1, pEnd_, value_);
}
}
}
- 时间复杂度
设数组规模为n
时间复杂度