Sto studiando l'heap & ordinamento heap.
C'è una matrice: arr[8] = {6,9,3,1,8,7,2,11}
Quando sto cercando di creare l'heap, utilizzando codice e matita, ho affrontato due tipi di heap.
Quando si crea heap, l'heap è univoco?
Quando si utilizza il codice, MaxHeap: 11 9 7 6 8 3 2 1
Usando teoria inserimento, MaxHeap: 11 9 7 8 6 3 2 1
Il codice che i' m utilizzando:
int[] DoHeapSort(int[] value) {
int length = value.length;
for (int i = length/2; i > 0; i--) {
maxHeapify(value, i, length);
}
//print Heap
for(int i = 0 ; i<value.length; i++)
System.out.println(value[i]);
return (value);
}
void maxHeapify(int[] array, int index, int heapSize) {
int left = index * 2;
int right = left + 1;
int max = index;
if (left <= heapSize && array[left - 1] > array[index - 1]) {
max = left;
}
if (right <= heapSize && array[right - 1] > array[max - 1]) {
max = right;
}
if (max != index) {
swap(array, index - 1, max - 1);
maxHeapify(array, max, heapSize);
}
}
Theory, in questo caso, creare un altro array per cumulo e inserire dal 6 all'11 in ordine. (D'altra parte, il codice è heap sul posto)
Entrambi i risultati maxHeap hanno soddisfatto la definizione dell'heap. Allora Heap non è unico? Grazie
Grazie. Quindi, quale è il metodo raccomandato? – user3595632
@ user3595632: sceglierei l'algoritmo sul posto O (n). Questa è la consueta implementazione. – rici
O (n)? ... Come so, lo sviluppo di heap è O (nlogn) ...... ?? Nel peggiore dei casi, non è vero? – user3595632