2017-09-11 21 views
0

當我在進行合併排序時,發現發生了一些奇怪的事情,我不知道爲什麼。由於我對Kotlin不太熟悉,我不知道問題是否是我的邏輯或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 ") 
} 

然而,當我改變功能歸併到低於

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) 
} 

我不能對數組進行排序。不知道該怎麼做這個...

回答

3

相當於

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

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

在你的樣品,不工作,你使用right >= left。將其更改爲left >= right

+0

非常感謝! –

相關問題