Scala 此合并排序程序未给出正确答案 对象合并排序 { def合并(a:Array[Int],p:Int,q:Int,r:Int) { 变量i:Int=0 变量j:Int=0 变量k:Int=0 变量n1=q-p+1 var n2=r-q var L:Array[Int]=新数组[Int](n1); var R:Array[Int]=新数组[Int](n2); 对于(i
你必须非常小心使用指数。我已经纠正了一些错误,请看:Scala 此合并排序程序未给出正确答案 对象合并排序 { def合并(a:Array[Int],p:Int,q:Int,r:Int) { 变量i:Int=0 变量j:Int=0 变量k:Int=0 变量n1=q-p+1 var n2=r-q var L:Array[Int]=新数组[Int](n1); var R:Array[Int]=新数组[Int](n2); 对于(i,scala,mergesort,Scala,Mergesort,你必须非常小心使用指数。我已经纠正了一些错误,请看: object MergeSort { def merge(a:Array[Int],p:Int,q:Int,r:Int) { var i:Int=0 var j:Int=0 var k:Int=0 var n1 = q-p+1 var n2 = r-q var L : Array[Int] = new Array[Int](n1
object MergeSort
{
def merge(a:Array[Int],p:Int,q:Int,r:Int)
{
var i:Int=0
var j:Int=0
var k:Int=0
var n1 = q-p+1
var n2 = r-q
var L : Array[Int] = new Array[Int](n1);
var R : Array[Int] = new Array[Int](n2);
for(i <-0 to n1-1)
{
L(i)=a(p+i);
}
for(j <-0 to n2-1)
{
L(j)=a(q+j);
}
i=0
j=0
k=0
while (i < n1 && j < n2) {
if (L(i) <= R(j)) {
a(k) = L(i);
i=i+1;
k=k+1;
} else {
a(k) = R(j);
k=k+1;
j=j+1;
}
}
while (i < n1) {
a(k) = L(i);
k=k+1;
i=i+1;
}
while (j < n2) {
a(k) = R(j);
k=k+1;
j=j+1;
}
}
def mergeSort(a:Array[Int], p:Int,r:Int ):Unit =
{
if(p<r)
{
var q:Int = (p+r)/2
mergeSort(a,p,q)
mergeSort(a,q+1,r)
merge(a,p,q,r)
}
}
def main(args : Array[String])
{
var a = Array(5,7,3,9,8,2,1,6,4,0)
println("array is")
for ( x <- a )
{
println( x )
}
mergeSort(a,0,9)
println("array after sorting is")
for ( x <- a )
{
println( x )
}
}
}
objectfoo{
def合并(a:Array[Int],p:Int,q:Int,r:Int)
{
//变量i:Int=0
//变量j:Int=0
//变量k:Int=0这不是C
变量n1=q-p+1
var n2=r-q
var L:Array[Int]=新数组[Int](n1);
var R:Array[Int]=新数组[Int](n2);
对于(i)合并排序问题,回答良好:
object Foo {
def merge(a:Array[Int],p:Int,q:Int,r:Int)
{
//var i:Int=0
//var j:Int=0
//var k:Int=0 this is not C
var n1 = q-p+1
var n2 = r-q
var L : Array[Int] = new Array[Int](n1);
var R : Array[Int] = new Array[Int](n2);
for(i <-0 until n1) // notice until
{
L(i)=a(p+i);
}
for(j <-0 until n2)
{
// copy to R not to L !!!
R(j)=a(q+ 1 + j); // a(q) belongs to L !!!
}
var i=0
var j=0
var k=p // copy from p, not begining!
while (i < n1 && j < n2) {
if (L(i) <= R(j)) {
a(k) = L(i);
i=i+1;
k=k+1;
} else {
a(k) = R(j);
k=k+1;
j=j+1;
}
}
while (i < n1) {
a(k) = L(i);
k=k+1;
i=i+1;
}
while (j < n2) {
a(k) = R(j);
k=k+1;
j=j+1;
}
}
def mergeSort(a: Array[Int], p: Int, r: Int): Unit =
{
if (p < r ) {
var q: Int = (p + r) / 2
mergeSort(a, p, q) // from p to q inclusive sorted
mergeSort(a, q + 1, r) // from q + 1 to r inclusive sorted
merge(a, p, q, r)
}
}
def main(args: Array[String]) {
var a = Array(5, 7, 3, 9, 8, 2, 1, 6, 4, 0)
println(s"array is: ${a.toList}")
mergeSort(a, 0, 9)
println(s"array is: ${a.toList}")
}
}