最も珍しい配列ソートアルゴリズムの1つはHeapSortです。これは、選択ソートアルゴリズムに基づいており、ヒープデータ構造を使用して最大要素をすばやく見つけ、バイナリツリーを線形配列に格納する方法も使用します。すべてを順番に処理しましょう。
選択で並べ替え
.
, . - .
, , 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 - , () . . . - .