美文网首页
swift写二分法查找

swift写二分法查找

作者: 编程_书恨少 | 来源:发表于2016-10-21 13:19 被阅读0次

一、原理

1.二分法查找的前提是要先将数组进行排序

2.二分法查找是将数组逐次分成两个数组,然后再在分好的两个数组当中的一个进行继续分数组查找的一个过程,所以二分法查找只会查找数组当中的一部分。

3.比较。如果要查找的元素大于数组分割的中间元素,那么查找就在后面的大的数组中进行,如果要查找的元素小于数组的分割的中间元素,那么查找就在前面的小数组中进行,当然如果正好等于的话那么查找就结束了。

4.话不多说,直接上代码

func binarySearch(array: [Int], target: Int) -> Int {

 var left = 0
 var right = array.count - 1

 while (left <= right) {

   let mid = (left + right) / 2
   let value = array[mid]

   if (value == target) {
     return mid
   }

  if (value < target) {
    left = mid + 1
  }

   if (value > target) {
      right = mid - 1
   }
  }

  return -1
}

5.上面的这种写法只适用于整型数组,我们是要查找所有可以进行比较的元素类型,所以这里要用到泛型

func binarySearch(array: [T], target: T) -> Int  {

  var left = 0
  var right = array.count - 1

  while (left <= right) {

    let mid = (left + right) / 2
    let value = array[mid]

    if (value == target) {
      return mid
    }

    if (value < target) {
      left = mid + 1
    }

    if (value > target) {
      right = mid - 1
    }
  }

  return -1
}

6.当然也还有一些其他的扩展,比如你想在字符串数组中查找以某串字符开头的元素也是可以的

func binarySearchPrefix(array: [String], target: String) -> Int {

  var left = 0
  var right = array.count - 1

  while (left <= right) {

    let mid = (left + right) / 2
    let value = array[mid]

    if (value.hasPrefix(target)) {
      return mid
    }

    if (value < target) {
      left = mid + 1
    }

    if (value > target) {
      right = mid - 1
    }
  }

   return -1
}

到此,二分法基本上也就差不多了

相关文章

  • Swift的二分法查找实践

    Swift的二分法查找实践 在这篇教程中我们会使用计算机科学里一个基础的算法:二分法查找binary search...

  • 二分法查找

    二分法基本查找 二分法遍历查找

  • swift写二分法查找

    一、原理 1.二分法查找的前提是要先将数组进行排序 2.二分法查找是将数组逐次分成两个数组,然后再在分好的两个数组...

  • 二分法查找

    二分法查找的前提是数组必须排序!!!二分法查找的前提是数组必须排序!!!二分法查找的前提是数组必须排序!!!二分法...

  • 刷前端面经笔记(九)

    1.JavaScript实现二分法查找? 二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。查找...

  • 数据结构-递归

    二分法查找

  • 查找算法

    三种查找算法:顺序查找,二分法查找(折半查找),分块查找,散列表

  • 二分查找

    以二分法来提升查找效率 二分法查找到key的合适位置 put get delete 二分查找的查找操作为O(log...

  • 算法和排序

    1、线性查找 2、二分法查找 3、冒泡排序

  • 查找算法

    查找算法 顺序查找法 时间复杂度:O(n) 二分法查找 二分法查找适用于有顺序的序列 时间复杂度:O(n) 核心思...

网友评论

      本文标题:swift写二分法查找

      本文链接:https://www.haomeiwen.com/subject/tptcuttx.html