2017-09-11 12 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) 
} 

以下に機能のマージを変更するとき、私は配列をソートすることはできません。

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

と同等のは、あなたがright >= leftを使用して動作しませんあなたのサンプルで

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

です...これについて何をすべきか

答えて

3

を知ってはいけません。それをleft >= rightに変更します。

+0

ありがとうございました! –

関連する問題