Как работает удаление в алгоритме сортировки кучи ?
Ниже я попробовал алгоритм сортировки кучи , первая часть алгоритма , то есть для построения максимальной кучи массива, работает правильно, но вторая часть кода на строке № 29, то есть часть удаления , код, похоже, не работает.
Я пытаюсь поменять корневое значение max heap на последнее значение, а затем снова нагромождать массив и позволять ему циклически работать до тех пор, пока цикл for не остановится и ключи не будут отсортированы.
Но по какой-то причине я не понимаю, что здесь не так.
Не могли бы вы, пожалуйста, быстро взглянуть ниже .
Спасибо.
public class demo { public static void main(String[] args) { int[] myarray = {4, 8, 1, 2, 9, 11, 0}; heapSort(myarray, myarray.length - 1); System.out.println(Arrays.toString(myarray)); } public static void heapSort(int[] array, int n) { // n = total no. of elements // n/2 -1 since we started array form 0 // n/2 if array starts from index 1 // Build max heap for (int i = n / 2 - 1; i >= 1; i--) { maxHeapify(array, n, i); } //DELETION PART for (int i = n; i >= 1; i--) { swap(array, 1, i); maxHeapify(array, n, 1); } } // i= start heapify from this index // n = total no. of elements public static void maxHeapify(int[] array, int n, int i) { int largest = i; int l = (2 * i) + 1; int r = (2 * i) + 2; while (l <= n && array[l] > array[largest]) { largest = l; } while (r <= n && array[r] > array[largest]) { largest = r; } if (largest != i) { swap(array, largest, i); maxHeapify(array, n, largest); } } private static void swap(int[] array, int index1, int index2) { int indexOne = array[index1]; int indextwo = array[index2]; array[index2] = indexOne; array[index1] = indextwo; }
Что я уже пробовал:
Попробовал погуглить а потом приземлился здесь