【发布时间】:2019-10-18 07:23:06
【问题描述】:
我已经实现了算法简介一书中的快速排序。本书规定的程序如下
但是我没有看到第 4 行的小于等于比较的要求,不应该只是小于比较就足够了。
为了检查我是否编写了以下程序,并且它在我测试过的数据集上运行正确。
private fun partition(start: Int, end: Int, arr: Array<Int>) : Int{
var pivotIndex = end
var maximumElementIndex = start
for(index in start until end){
if(arr[index]<arr[pivotIndex]){
val temp = arr[index]
arr[index] = arr[maximumElementIndex]
arr[maximumElementIndex] = temp
maximumElementIndex++
}
}
val temp = arr[maximumElementIndex]
arr[maximumElementIndex] = arr[pivotIndex]
arr[pivotIndex] = temp
return maximumElementIndex
}
我已经在以下输入上对其进行了测试
- 元素全部相等的数组
- 排序数组
- 反向排序
- 多个随机数据集
那么我在这里缺少什么?
【问题讨论】:
-
您的“随机数据集”测试是否专门包括具有多个重复项的数组?
-
@JimMischel 是的,我用过这个(1,5,5,5,3,4,1,2,2,2,3,4,5,1),输出是正确的排序
-
必须仔细构建测试用例,并了解分区的工作原理。分区中重复项的位置可能会影响事物。因此,除非您的测试用例涵盖所有可能性,否则无法确定。我以前见过这种情况,导致一个严重的错误逃逸到生产环境。用少数案例进行测试并不能替代检查算法并充分理解其行为。除非您完全理解,否则将
<=比较留在那里。它不需要任何费用。 -
@JimMischel 我正在寻找关于为什么需要
标签: algorithm sorting quicksort