Einer der ungewöhnlichsten Array-Sortieralgorithmen ist HeapSort, das auf einem Auswahlsortieralgorithmus basiert, eine Heap-Datenstruktur verwendet, um schnell das maximale Element zu finden, und auch eine Möglichkeit, einen Binärbaum in einem linearen Array zu speichern. Lassen Sie uns alles in Ordnung bringen.
Nach Auswahl sortieren
.
, . - .
, , 1.
, N . , :
(2*N + 1) + (2*(N - 1) + 1) + … + (2*K + 1) + … + 2*1 + 1 = 2(N*N - N)/2 + N = N*N
, - O(N^2).
.
. - ? , , «» «». , . , - 1 .
, :
, . , , , . .
P = (x - 1) / 2
L = 2x + 1
R = 2x + 2
: .
void heapify(int root, int size)
, , . - .
?
, , «» . -- .
- , , .
, . heapify , , - , , .
heapify()
. .
HeapSort
? - . N/2 . , , log 2 N.
, - (N log N) / 2
. . , . 1, , .
«» -- , , . log 2 K , K - .
N , , !
O(N log 2 N).
- - «» , .
" ". 20 - , () . . . - .