如何解决如何检测到快速排序算法已对所有元素进行了排序?
我知道这听起来很奇怪,但是,我正在开发一个应用程序,其中我需要在quicksort完成对数组的排序后执行一些操作,并且我需要找到开始索引或结束索引或数据透视表之间或与之相关的任何关系可以告诉我,这将是对数组进行排序所需的最后一个分区/交换...
fun quickSort2(arr: ArrayList<Int>,start: Int,end: Int,from: String) {
if (start >= end) return
val p = partitions(arr,start,end,from)
quickSort2(arr,p - 1,"first")
quickSort2(arr,p + 1,"second")
}
分区功能:
fun partitions(arr: ArrayList<Int>,from: String): Int {
val pivotValue = arr[end]
var pivotIndex = start
for (i in start until end) {
if (arr[i] < pivotValue) {
swap(arr,i,pivotIndex)
pivotIndex++
}
}
swap(arr,pivotIndex,end)
return pivotIndex
}
交换功能:
fun swap(arr: ArrayList<Int>,i: Int,pivotIndex: Int) {
val temp = arr[i]
arr[i] = arr[pivotIndex]
arr[pivotIndex] = temp
}
是否可以有任何类似if(start <= something && end <=someting)
的关系来说明是将是最后一个交换区或最后一个分区,或者这是对数组进行排序时的关系,或者我可以使用这么多的大小来计算次分区将被调用,任何可以告诉我现阶段数组已排序的信息,
解决方法
您无需检查任何内容:只需在整个阵列上调用一次quickSort2
。
调用返回后,您可以确定整个数组都已排序。
这是因为quickSort2
总是在较小的子数组上调用自身,并且会检查子数组是否为空(if (start >= end) return
)。
为确保确实如此,您可以在quickSort2
的开头添加一些日志记录信息,以显示输入参数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。