“`” 堆一般指二叉堆。

复杂度:O(nlogn) – O(nlgn) – O(nlgn) – O(1)[平均 – 最好 – 最坏 – 空间复杂度]

大顶堆实现从小到大的升序排列,小顶堆一般用于构造优先队列

<pre><code class=""language-java"" lang=""java""> public void heapSort(int[] a) {
if (null == a || a.length < 2) {
return;
}

buildMaxHeap(a);

for (int i = a.length – 1; i >= 0; i–) {
int temp = a[0];
a[0] = a[i];
a[i] = temp;

adjustHeap(a, i, 0);
}
}

// 建堆
private void buildMaxHeap(int[] a) {
int mid = a.length / 2;
for (int i = mid; i >= 0; i–) {
adjustHeap(a, a.length, i);
}
}

// 递归调整堆
private void adjustHeap(int[] a, int size, int parent) {
int left = 2 * parent + 1;
int right = 2 * parent + 2;

int largest = parent;
if (left < size && a[left] > a[parent]) {
largest = left;
}

if (right < size && a[right] > a[largest]) {
largest = right;
}

if (parent != largest) {
int temp = a[parent];
a[parent] = a[largest];
a[largest] = temp;
adjustHeap(a, size, largest);
}
}
</code></pre>

<pre><code> "“`

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.