我有一个包含以下元素的数组:var arr = Array[Int](10,16,8,12,15,6,3,9,5)
我正在尝试使用快速排序技术对其进行排序。
下面是我编写的用于执行快速排序的代码:
object Quick {
def main(args: Array[String]): Unit = {
var arr = Array[Int](10,5)
var low = 0
var high = arr.length-1
quickSort(low,high)
arr.foreach(println)
def quickSort(low:Int,high:Int):Unit = {
if(low<high) {
var j = partition(low,high)
quickSort(low,j)
quickSort(j+1,high)
}
}
def partition(low:Int,high:Int): Int = {
var pivot = arr(low)
var i = low
var j = high
while(i<j) {
do {
i += 1
} while(arr(i) <= pivot)
do {
j -= 1
} while(arr(j) > pivot)
if(i<j) swap(i,j)
}
swap(i,j)
j
}
def swap(ai:Int,aj:Int): Unit = {
var tmp = arr(ai)
arr(ai) = arr(aj)
arr(aj) = tmp
}
}
}
运行代码时,它在以下行中断:while(arr(i) <= pivot)
,其中索引正变为9
我先通过添加条件if(i < arr.length-1) i += 1
处理了该操作
在第二次操作中也发生了同样的情况,其中行while(arr(j) > pivot)
的索引以-1
结尾变成ArrayOutOfBoundsException
。我通过添加条件来处理它:if(j>0) j-= 1
如果我添加了这些条件,但我删除了这些条件,代码将进入无限循环,这将导致ArrayOutOfBoundsException的索引分别为9和-1,分别为低和高。
任何人都可以让我知道我在这里犯的错误吗?