算法--查找

查找算法

针对数组容器查找算法

对无序数组

顺序查找

  1. 算法实现
		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;
		}
  1. 时间复杂度:
    设数组规模n
    时间复杂度
    Θ ( n ) Θ(n)

对有序数组

二分查找

  1. 算法实现
		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_);
				}
			}
		}
  1. 时间复杂度
    设数组规模为n
    时间复杂度 Θ ( l g ( n ) ) Θ(lg(n))
发布了117 篇原创文章 · 获赞 84 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/x13262608581/article/details/105259076