搜索算法

顺序搜索

顺序或线性搜索是最基本的搜索算法。它的机制是,将每一个数据结构中的元素和我们要找的元素做比较。顺序搜索是最低效的一种搜索算法。

以下是其实现:
// 定义顺序搜索函数
this.sequentialSearch = function(item){
  // 遍历整个数组
  for (var i=0; i < array.length; i++){ 
    // 如果数组中的当前元素与搜索的项相同
    if (item === array[i]) 
      return i; // 返回元素的索引
  }
  return -1; // 如果未找到则返回-1
};

顺序搜索迭代整个数组,并将每个数组元素和搜索项作比较。如果搜索到了,算法将用返回值来标示搜索成功。

二分搜索

二分搜索算法的原理和猜数字游戏类似,就是那个有人说“我正想着一个1到100的数字”的游戏。我们每回应一个数字,那个人就会说这个数字是高了、低了还是对了。

这个算法要求被搜索的数据结构已排序。以下是该算法遵循的步骤。
(1) 选择数组的中间值。
(2) 如果选中值是待搜索值,那么算法执行完毕(值找到了)。
(3) 如果待搜索值比选中值要小,则返回步骤1并在选中值左边的子数组中寻找。
(4) 如果待搜索值比选中值要大,则返回步骤1并在选种值右边的子数组中寻找。

以下是其实现:
// 定义二分搜索函数
this.binarySearch = function(item){
  this.quickSort(); // 开始前先对数组进行排序
  var low = 0, // 定义低指针
      high = array.length - 1, // 定义高指针
      mid, element;

  // 当低指针小于等于高指针时,执行循环
  while (low <= high){ 
    mid = Math.floor((low + high) / 2); // 计算中间索引
    element = array[mid]; // 获取中间元素的值
    if (element < item) { // 如果中间元素的值小于搜索的值
      low = mid + 1; // 更新低指针
    } else if (element > item) { // 如果中间元素的值大于搜索的值
      high = mid - 1; // 更新高指针
    } else {
      return mid; // 返回中间元素的索引
    }
  }
  return -1; // 如果未找到则返回-1
};
    

posted on 2019-04-03 17:58  完美前端  阅读(404)  评论(0)    收藏  举报

导航