设为首页 加入收藏

TOP

四种查找算法的简单分析(一)
2013-04-10 11:52:57 来源: 作者: 【 】 浏览:550
Tags:查找 算法 简单 分析

  #pragma once

  /*

  --- 顺序查找 ---

  按数组从头开始一一查找。

  */

  int SequenceSearch(int nArray[], int nLength, int nValue)

  {

  for (int n = 0; n < nLength; ++n)

  {

  if (nArray[n] == nValue)

  {

  return n;

  }

  }

  return -1;

  }

  /*

  --- 折半查找 ---

  1、确定数组的折半中点,对数组折半;

  2、比较查找的数据a与中点数据b的大小关系,若a<b则对数组的后半部分重复步骤1,若a>b则对数组的前半部分重复步骤1,直到数组元素为1;

  3、判断该元素是否为要找的元素。

  */

  int HalfSearch(int nArray[], int nLow, int nHigh, int nValue)

  {

  int nIndex = -1;

  if (nLow < nHigh)

  {

  int nMid = (nLow + nHigh) / 2;

  if (nArray[nMid] > nValue)

  {

  nIndex = HalfSearch(nArray, 0, nMid - 1, nValue);

  }

  else if (nArray[nMid] < nValue)

  {

  nIndex = HalfSearch(nArray, nMid + 1, nHigh, nValue);

  }

  else if (nArray[nMid] == nValue)

  {

  nIndex = nMid;

  }

  }

  return nIndex;

  }

  /*

  --- 哈希查找 ---

  1、确定哈希的key与value的关系,及冲突的解决方案;

  2、将数据插入到哈希数组;

  3、根据value结合冲突解决方案查找key。

  */

  void InsertHash(int nArray[], int nValue, int nHashBase)

  {

  int nKey = nValue % nHashBase;

  while(nArray[nKey] != 0)

  {

  nKey = (++nKey) % nHashBase;

  }

  nArray[nKey] = nValue;

  }

  int SearchHash(int nArray[], int nValue, int nHashBase)

  {

  int nKey = nValue % nHashBase;

  while(nArray[nKey] != 0 && nArray[nKey] != nValue)

  {

  nKey = (++nKey) % nHashBase;

  }

  return (nArray[nKey] == nValue nKey : -1);

  }

  void Test_HashSearch()

  {

  int nArray = {0};

  InsertHash(nArray, 2, 5);

  InsertHash(nArray, 3, 5);

  InsertHash(nArray, 7, 5);

  InsertHash(nArray, 1, 5);

  InsertHash(nArray, 4, 5);

  int nKey = SearchHash(nArray, 2, 5);

   

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇局部类实现C++的闭包 下一篇C++模板简单分析与举例

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: