在Kotlin中进行合并排序时会发生奇怪的情况

时间:2017-09-11 11:20:31

标签: kotlin mergesort

当我进行合并排序时,我发现发生了一些奇怪的事情,我不明白为什么。由于我对Kotlin不太熟悉,我不知道问题是我的逻辑还是Kotlin语法。需要帮助。

这是代码。这个版本有效。

fun runMergeSort(anArray:IntArray,n:Int){
    mergeSort(anArray,0,n-1)
}

fun mergeSort(intArray: IntArray,left:Int,right:Int){
    if(left<right){
        val mid = (left+right)/2
        mergeSort(intArray,left,mid)
        mergeSort(intArray,mid+1,right)
        merge(intArray,left,mid,right)
    }
}

fun merge(intArray:IntArray,left:Int,mid:Int,right:Int){
    val aux = IntArray(right-left+1)
    for(i in left..right){
        aux[i-left] = intArray[i]
    }
    var i = left
    var j = mid+1
    for(k in left..right){
        if(i>mid){
            intArray[k] = aux[j-left]
            j++
        }
        else if (j>right){
            intArray[k] = aux[i-left]
            i++
        }
        else if(aux[i-left]<aux[j-left]){
            intArray[k] = aux[i-left]
            i++
        }
        else{
            intArray[k] = aux[j-left]
            j++
        }
    }
}

fun main(args: Array<String>) {
    val anArray = intArrayOf(7,5,2,5,11,3,6,8)
    runMergeSort(anArray,anArray.size)
    for(i in anArray)
        print("$i ")
}

但是,当我将函数mergeSort更改为

fun mergeSort(intArray: IntArray,left:Int,right:Int){
    if(right>=left)
        return
    val mid = (left+right)/2
    mergeSort(intArray,left,mid)
    mergeSort(intArray,mid+1,right)
    merge(intArray,left,mid,right)
}

我无法对数组进行排序。不知道该怎么办......

1 个答案:

答案 0 :(得分:3)

相当于

if (left < right) {
    /* do something */
}

if (left >= right) 
    return
/* do something */

在不起作用的示例中,您使用right >= left。将其更改为left >= right