Сложность: medium
Задав массив целых чисел nums, отсортируйте массив по возрастанию и верните его. Вы должны решить задачу без использования встроенных функций за время O(nlog(n)) и с минимально возможной пространственной сложностью.
Пример:
Input: nums = [5,2,3,1]
Output: [1,2,3,5]
👨💻 Алгоритм:
1⃣Используем алгоритм "Сортировка слиянием" (Merge Sort), который обеспечивает время выполнения O(n log n) и минимально возможную пространственную сложность для стабильного сортировочного алгоритма.
2⃣Разделить массив на две половины.
Рекурсивно отсортировать каждую половину.
3⃣Слить две отсортированные половины.
😎 Решение:
import java.util.Arrays;
public class Main {
public static void mergeSort(int[] nums) {
if (nums.length > 1) {
int mid = nums.length / 2;
int[] left_half = Arrays.copyOfRange(nums, 0, mid);
int[] right_half = Arrays.copyOfRange(nums, mid, nums.length);
mergeSort(left_half);
mergeSort(right_half);
int i = 0, j = 0, k = 0;
while (i < left_half.length && j < right_half.length) {
if (left_half[i] < right_half[j]) {
nums[k++] = left_half[i++];
} else {
nums[k++] = right_half[j++];
}
}
while (i < left_half.length) {
nums[k++] = left_half[i++];
}
while (j < right_half.length) {
nums[k++] = right_half[j++];
}
}
}
}
Ставь 👍 и забирай 📚 Базу знаний