package day15
import day14.Utils
import day15.BinarySearch.printlnArray
import scala.collection.mutable.ArrayBuffer
/**
* Created by doctorq on 2017/6/30.
* 插值查找:改進二分查找的算法,在數值範圍比較大,分佈比較均勻時可以採用插值查找來取代二分查找
* 切分的索引值不再是之前的中間位置,根據待查找的數值的權重來計算切分的索引值
*/
object InsertSearch extends App with Utils {
def search(unSorted: Array[Int], find: Int): Unit = {
val size = unSorted.size
if (size == 0) {
println(s"${find} no find")
return
}
printlnArray(unSorted)
val index =
(size - 1) * (find - unSorted(0)) / (unSorted(size - 1) - unSorted(0))
val flag = unSorted(index)
if (find == flag) {
println(s"find ${index}")
return
} else if (find > flag) {
val right = subArray(unSorted, index + 1, size - 1)
search(right, find)
} else {
val left = subArray(unSorted, 0, index - 1)
search(left, find)
}
}
def subArray(parent: Array[Int], start: Int, end: Int): Array[Int] = {
val subArray = new ArrayBuffer[Int]()
for (i <- start to end) {
subArray.append(parent(i))
}
subArray.toArray
}
val list = Array(1, 3, 4, 2, 5, 5, 6, 9, 3, 4, 4)
search(list.sorted, 3)
}
Scala練習-插值查找
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.