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 */
です...これについて何をすべきか
ありがとうございました! –