这是quicksort的有效实现吗?它与我在其他地方看到它的实现方式不同,但我发现以这种方式实现它更容易。据我所知,它仍然就位并且O(n log n)[编辑:O(n log n)预期运行时间,O(n ^ 2)最坏情况],但是想要确定之前我是在求职面试中做的,看起来像个白痴......
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
classpath 'com.android.databinding:dataBinder:1.0-rc4'
}
}
...
android {
dataBinding {
enabled true
}
}
...
答案 0 :(得分:0)
它看起来不错(但你应该尝试确定),但它不在O(n log(n))
。
实际上,通过始终将最大值作为中间值,可以发送将触发n
递归调用的特定数组,这使得总复杂度为N^2
。
例如:1, 2, 3, 7, 4, 5, 6
。 7
将成为枢轴,因此数组将被分为空数组和1, 2, 3, 4, 5, 6
。
在这种情况下,只有第一次拆分是“坏”,但你可以很容易想象如何使所有拆分变坏。
要获得O(N log(N))
平均值复杂度,最常用的解决方案是随机选择轴。