Сортировка
Описание: Этот алгоритм проходит по списку несколько раз, сравнивая каждую пару соседних элементов и меняя их местами, если они находятся в неправильном порядке.
Сложность: В среднем и в худшем случае время выполнения составляет O(n^2).
Применение: Сортировка пузырьком используется в основном для обучающих целей из-за своей неэффективности.
fun bubbleSort(arr: IntArray) {
val n = arr.size
var swapped: Boolean
do {
swapped = false
for (i in 0 until n - 1) {
if (arr[i] > arr[i + 1]) {
val temp = arr[i]
arr[i] = arr[i + 1]
arr[i + 1] = temp
swapped = true
}
}
} while (swapped)
}
fun main() {
val arr = intArrayOf(64, 34, 25, 12, 22, 11, 90)
bubbleSort(arr)
println("Отсортированный массив: ${arr.joinToString()}")
}
Описание: Этот алгоритм проходит по списку и на каждой итерации вставляет текущий элемент в подходящее место в отсортированной части списка.
Сложность: В среднем и в худшем случае время выполнения составляет O(n^2).
Применение: Этот алгоритм эффективен на небольших списках или уже частично отсортированных данных.
fun insertionSort(arr: IntArray) {
val n = arr.size
for (i in 1 until n) {
val key = arr[i]
var j = i - 1
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j]
j--
}
arr[j + 1] = key
}
}
fun main() {
val arr = intArrayOf(64, 34, 25, 12, 22, 11, 90)
insertionSort(arr)
println("Отсортированный массив: ${arr.joinToString()}")
}
fun quickSort(arr: IntArray, low: Int, high: Int) {
if (low < high) {
val pi = partition(arr, low, high)
quickSort(arr, low, pi - 1)
quickSort(arr, pi + 1, high)
}
}
fun partition(arr: IntArray, low: Int, high: Int): Int {
val pivot = arr[high]
var i = low - 1
for (j in low until high) {
if (arr[j] < pivot) {
i++
val temp = arr[i]
arr[i] = arr[j]
arr[j] = temp
}
}
val temp = arr[i + 1]
arr[i + 1] = arr[high]
arr[high] = temp
return i + 1
}
fun main() {
val arr = intArrayOf(64, 34, 25, 12, 22, 11, 90)
quickSort(arr, 0, arr.size - 1)
println("Отсортированный массив: ${arr.joinToString()}")
}