Вы гений! Я 3 дня читал разные коды с рекурсией/без, смотрел обьяснения, но нигде не было понятной, пошаговой реазлизации, вы спасли мою мотивацию продолжать развиваться, спасибо !
Спасибо хорошее объяснение. Только в конце не понятна механика Merge(array,left,right). Если мы передали самые меньшие числа Left/right. То откуда появляться числа более высоких под массивов?
Спасибо за устные разъяснения алгоритма, очень помогло разобраться, как работает алгоритм Но код, конечно, можно улучшить намного, метод Sort точно, все проверки можно сузить до примерно такого состояния. Делает абсолютно то же самое, но выглядит понятнее for (int i = 0; i < merged.Length; ++i) { if (indexMinOfFirst < first.Length && indexMinOfSecond < second.Length) { merged[i] = first[indexMinOfFirst] > second[indexMinOfSecond] ? second[indexMinOfSecond++] : first[indexMinOfFirst++]; } else { merged[i] = indexMinOfSecond < second.Length ? second[indexMinOfSecond++] : first[indexMinOfFirst++]; } }
так то конечно все прекрассноно, меня терзают смутные сомненья что создание новых массивов каждый раз ускоряет процесс. Есть метод создания динамическогго пивота и размещения элементов по бокам от него. class Program{ static void Main(string[] args){ int[] inputArray = {9,12,9,2,17,1,6}; int[] array2= QuikSort(inputArray, 0, inputArray.Length-1); foreach (var n in array2) Console.WriteLine(n); } public static int[] QuikSort(int[] array, int minIndex, int maxIndex) { if (minIndex>=maxIndex) return array; int pivotIndex = GetPivot(array,minIndex, maxIndex); QuikSort(array, minIndex, pivotIndex - 1); QuikSort(array, pivotIndex + 1, maxIndex); return array; } public static int GetPivot(int[] array, int minIndex, int maxIndex) { int pivot = minIndex - 1; for (int i = minIndex; i