Я пытаюсь реализовать heapsort, используя ArrayList.Я не знаком с использованием ArrayList, но вот что я придумал для одного метода моей программы, maxHeap:
Я не уверен, правильно ли я использую метод array.get(element)
,Я знаю, что вы должны использовать этот метод для получения значения в элементе, но в этом случае, если бы я хотел установить largest = left
, я бы поставил его как arr.get(largest) = arr.get(left)
?Или я бы использовал метод array.set()
?
public class Heaps
{
public void maxHeap(ArrayList<Integer> arr, int index, int size)
{
int largest = index; // Largest index
int left = (2*index) + 1; // Left Child node
int right =(2*index) + 2; // Right Child node
size = arr.size(); // Size of array
if ((left < size) && (arr.get(left) > arr.get(largest)))
{
largest = left;
}
else
{
largest = index;
}
if ((right < size) && (arr.get(right) > arr.get(largest)))
{
largest = right;
}
if (largest != index)
{
// Swap element at index with element at largest
Collections.swap(arr, arr.get(index), arr.get(largest));
maxHeap(arr, largest, size); // Recursive call
}
}
public static void main(String[] args)
{
Heaps h = new Heaps();
int n = 5;
ArrayList<Integer> array = new ArrayList<Integer> (n);
Integer a[] = new Integer[n];
for (int i = 0; i < n; i++)
{
array.add(a[i]);
}
array.add(0, 30);
array.add(1, 10);
array.add(2, 16);
array.add(3, 17);
array.add(4, 19);
h.maxHeap(array, 0, array.size());
System.out.print(array);
}
}
Вывод этого должен быть максимальной кучей значений, например: 30, 19, 17, 16, 10
Фактический вывод - тот же самый введенный массив: 30, 10, 16, 17, 19
Итакв основном, maxHeap
не работал.Я не уверен, что мой синтаксис неверен для метода maxHeap
.