Kotlin 默认使用什么样的排序?

gro*_*myk 11 sorting algorithm kotlin

.sort()、.sortWith()等方法使用哪种排序?

val array = arrayOf(3,2,1)
Run Code Online (Sandbox Code Playgroud)

不同类型和大小的数组的算法是否存在一些差异?

Bar*_*ski 7

只是为了扩展Marko Toplnik 在评论中所说的:小心创建数组的方式,因为基于此,sort将使用不同的函数。


val array = arrayOf(3,2,1)
array.sort()
Run Code Online (Sandbox Code Playgroud)

这(在 Kotlin/JVM 中)导致:

public fun <T> Array<out T>.sort(): Unit {
    if (size > 1) java.util.Arrays.sort(this)
}
Run Code Online (Sandbox Code Playgroud)

https://github.com/JetBrains/kotlin/blob/04bbf2393684fb7f552da667e8f28dfc1f83bbfb/libraries/stdlib/jvm/src/generated/_ArraysJvm.kt#L1789-L1798

这将导致java.util.ComparableTimSort被使用(参见sort(Object[] a)


val array = intArrayOf(3,2,1)
array.sort()
Run Code Online (Sandbox Code Playgroud)

这(在 Kotlin/JVM 中)导致:

public actual fun IntArray.sort(): Unit {
    if (size > 1) java.util.Arrays.sort(this)
}
Run Code Online (Sandbox Code Playgroud)

https://github.com/JetBrains/kotlin/blob/04bbf2393684fb7f552da667e8f28dfc1f83bbfb/libraries/stdlib/jvm/src/generated/_ArraysJvm.kt#L1729-L1734

这将导致java.util.DualPivotQuicksort被使用(参见sort(int[] a)

  • 是的@DodgyCodeException,情况确实如此。这个答案包含两件事:1. Kotlin/JVM 中对“数组”进行排序的当前实现;2.一般建议在创建“数组”时注意细节,因为这可能会影响您稍后与其交互的方式。查看特定时间的实现可以像 cmd+单击(或 ctrl+单击)方法一样简单,但拓宽编写代码的视角则完全不同。 (2认同)