1.merge的原理图
计算的过程
2.下面给出代码
def merge(intArray: Array[Int], p: Int, q: Int, r: Int): Unit = {
val n1 = q - p + 1
val n2 = r - q
val MAX =100
var leftArray = new Array[Int](n1 + 1)
var rightArray = new Array[Int](n2 + 1)
for (i <- 0 to n1 - 1) {
leftArray(i) = intArray(p + i - 1)
}
for (i <- 0 to n2 -1) {
rightArray(i) = intArray(q + i)
}
leftArray(n1) = MAX
rightArray(n2) = MAX
// leftArray.foreach{ i => println(i) }
// rightArray.foreach{ i => println(i) }
var l = 0
var ri = 0
for (k <- p - 1 to r - 1) {
if (leftArray(l) <= rightArray(ri)) {
intArray(k) = leftArray(l)
l += 1
} else {
intArray(k) = rightArray(ri)
ri += 1
}
}
println("最后的排序结果")
intArray.foreach{ i => println(i) }
}
def mergeSort(intArray : Array[Int], p : Int, r : Int): Unit = {
if (p < r) {
val q = (p + r) / 2
mergeSort(intArray, p, q)
mergeSort(intArray, q + 1, r)
merge(intArray, p, q, r)
}
}
def main(args: Array[String]) = {
var intArray = Array(5,2,4,6,1,3,10,9,0)
mergeSort(intArray, 1 , 9)
}