Scala练习-哈希查找

原理
源码

package day15

import scala.collection.mutable.ArrayBuffer

/**
  * Created by doctorq on 2017/6/30.
  * 哈希查找
  * 解决冲突的两种方法:链地址法,开放地址法
  */
object HashSearch extends App {
  /**
    * 直接定址法
    *
    * @param value
    * @param length 常量
    * @return
    */
  def insertHash(array: Array[Int], value: Int, length: Int): Unit = {
    var key = value % length
    while (array(key) != 0) {
      key = (key + 1) % length
    }
    array(key) = value
  }


  def searchHash(array: Array[Int], find: Int, length: Int): Int = {
    var key = find % length
    while (array(key) != 0 && array(key) != find) {
      key = (key + 1) % length
    }
    if (array(key) == 0)
      return -1
    key
  }

  val length = 14
  val arrayBuffer = new Array[Int](length)

  val array = Array[Int](2, 4, 5, 63, 5, 6, 2, 3, 89, 34, 34, 7, 8)


  array.foreach(item => insertHash(arrayBuffer, item, length))

  //  val hash = for (i <- 0 until length if (arrayBuffer(i) != 0)) yield arrayBuffer(i)

  //  hash.foreach(println)
  arrayBuffer.foreach(println)

  val find = 34
  val hashKey = searchHash(arrayBuffer, find, length)

  hashKey match {
    case -1 => println(s"${find}' is not found")
    case _ => println(s"${find}'s hashCode is ${hashKey}")
  }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值