Задача: 912. Sort an Array
Сложность: medium
Задав массив целых чисел nums, отсортируйте массив по возрастанию и верните его. Вы должны решить задачу без использования встроенных функций за время O(nlog(n)) и с минимально возможной пространственной сложностью.
Пример:
👨💻 Алгоритм:
1⃣ Используем алгоритм "Сортировка слиянием" (Merge Sort), который обеспечивает время выполнения O(n log n) и минимально возможную пространственную сложность для стабильного сортировочного алгоритма.
2⃣ Разделить массив на две половины.
Рекурсивно отсортировать каждую половину.
3⃣ Слить две отсортированные половины.
😎 Решение:
Ставь 👍 и забирай 📚 Базу знаний
Сложность: medium
Задав массив целых чисел nums, отсортируйте массив по возрастанию и верните его. Вы должны решить задачу без использования встроенных функций за время O(nlog(n)) и с минимально возможной пространственной сложностью.
Пример:
Input: nums = [5,2,3,1]
Output: [1,2,3,5]
Рекурсивно отсортировать каждую половину.
package main
import (
"fmt"
)
func mergeSort(nums []int) {
if len(nums) > 1 {
mid := len(nums) / 2
left_half := make([]int, mid)
right_half := make([]int, len(nums)-mid)
copy(left_half, nums[:mid])
copy(right_half, nums[mid:])
mergeSort(left_half)
mergeSort(right_half)
i, j, k := 0, 0, 0
for i < len(left_half) && j < len(right_half) {
if left_half[i] < right_half[j] {
nums[k] = left_half[i]
i++
} else {
nums[k] = right_half[j]
j++
}
k++
}
for i < len(left_half) {
nums[k] = left_half[i]
i++
k++
}
for j < len(right_half) {
nums[k] = right_half[j]
j++
k++
}
}
}
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM