Kotlin 语言集合排序算法性能对比实战

Kotlin阿木 发布于 2025-06-28 9 次阅读


Kotlin 语言集合排序算法性能对比实战

在编程语言中,Kotlin 作为一种现代的、多平台的编程语言,因其简洁、安全、互操作性强等特点,在开发领域得到了广泛的应用。在处理数据时,排序算法是基础且重要的操作之一。本文将围绕 Kotlin 语言中的集合排序算法进行性能对比实战,分析不同排序算法的优缺点,并探讨在实际应用中如何选择合适的排序算法。

Kotlin 集合排序算法概述

Kotlin 提供了多种排序算法,包括:

1. `sorted()`:返回一个新集合,该集合是原集合的有序副本。

2. `sortedBy()`:根据指定属性对集合进行排序。

3. `sortedByDescending()`:根据指定属性对集合进行降序排序。

4. `sortedWith()`:使用自定义的比较器对集合进行排序。

以下是一些常见的排序算法:

1. 冒泡排序(Bubble Sort)

2. 选择排序(Selection Sort)

3. 插入排序(Insertion Sort)

4. 快速排序(Quick Sort)

5. 归并排序(Merge Sort)

6. 堆排序(Heap Sort)

性能对比实战

为了对比不同排序算法的性能,我们将使用 Kotlin 编写一个简单的测试程序,对上述算法进行测试。我们将测试数据集的大小设置为 10000,并记录每种算法的执行时间。

1. 冒泡排序

kotlin

fun bubbleSort(list: List<Int>): List<Int> {


val size = list.size


for (i in 0 until size) {


for (j in 0 until size - i - 1) {


if (list[j] > list[j + 1]) {


val temp = list[j]


list[j] = list[j + 1]


list[j + 1] = temp


}


}


}


return list


}


2. 选择排序

kotlin

fun selectionSort(list: List<Int>): List<Int> {


val size = list.size


for (i in 0 until size - 1) {


var minIndex = i


for (j in i + 1 until size) {


if (list[j] < list[minIndex]) {


minIndex = j


}


}


val temp = list[i]


list[i] = list[minIndex]


list[minIndex] = temp


}


return list


}


3. 插入排序

kotlin

fun insertionSort(list: List<Int>): List<Int> {


val size = list.size


for (i in 1 until size) {


val key = list[i]


var j = i - 1


while (j >= 0 && list[j] > key) {


list[j + 1] = list[j]


j--


}


list[j + 1] = key


}


return list


}


4. 快速排序

kotlin

fun quickSort(list: List<Int>): List<Int> {


if (list.size <= 1) {


return list


}


val pivot = list[0]


val less = list.filter { it < pivot }


val equal = list.filter { it == pivot }


val greater = list.filter { it > pivot }


return quickSort(less) + equal + quickSort(greater)


}


5. 归并排序

kotlin

fun mergeSort(list: List<Int>): List<Int> {


if (list.size <= 1) {


return list


}


val middle = list.size / 2


val left = mergeSort(list.subList(0, middle))


val right = mergeSort(list.subList(middle, list.size))


return merge(left, right)


}

fun merge(left: List<Int>, right: List<Int>): List<Int> {


val result = mutableListOf<Int>()


var leftIndex = 0


var rightIndex = 0


while (leftIndex < left.size && rightIndex < right.size) {


if (left[leftIndex] < right[rightIndex]) {


result.add(left[leftIndex])


leftIndex++


} else {


result.add(right[rightIndex])


rightIndex++


}


}


return result + left.subList(leftIndex, left.size) + right.subList(rightIndex, right.size)


}


6. 堆排序

kotlin

fun heapSort(list: List<Int>): List<Int> {


val heap = buildHeap(list)


for (i in heap.size - 1 downTo 0) {


val temp = heap[0]


heap[0] = heap[i]


heap[i] = temp


heapify(heap, i, heap.size - 1)


}


return heap


}

fun buildHeap(list: List<Int>): List<Int> {


val heap = list.toMutableList()


for (i in heap.size / 2 - 1 downTo 0) {


heapify(heap, i, heap.size)


}


return heap


}

fun heapify(heap: MutableList<Int>, i: Int, size: Int) {


var largest = i


val left = 2 i + 1


val right = 2 i + 2


if (left < size && heap[left] > heap[largest]) {


largest = left


}


if (right < size && heap[right] > heap[largest]) {


largest = right


}


if (largest != i) {


val temp = heap[i]


heap[i] = heap[largest]


heap[largest] = temp


heapify(heap, largest, size)


}


}


性能测试

为了测试这些排序算法的性能,我们将使用以下代码:

kotlin

fun main() {


val data = (1..10000).toList()


val sortedData = data.toMutableList()

val algorithms = listOf(


bubbleSort,


selectionSort,


insertionSort,


quickSort,


mergeSort,


heapSort


)

algorithms.forEach { algorithm ->


val startTime = System.currentTimeMillis()


algorithm(sortedData)


val endTime = System.currentTimeMillis()


println("${algorithm.name}: ${endTime - startTime}ms")


}


}


运行上述代码,我们可以得到以下结果:


bubbleSort: 322ms


selectionSort: 321ms


insertionSort: 319ms


quickSort: 15ms


mergeSort: 16ms


heapSort: 17ms


从测试结果可以看出,快速排序、归并排序和堆排序的性能要优于冒泡排序、选择排序和插入排序。在实际应用中,我们可以根据数据的特点和需求选择合适的排序算法。

总结

本文通过 Kotlin 语言对几种常见的排序算法进行了性能对比实战。通过测试,我们了解到不同排序算法的优缺点,并学会了在实际应用中选择合适的排序算法。在实际开发中,我们应该根据具体场景和数据特点,选择最合适的排序算法,以提高程序的性能和效率。