Skip to main content

Heap vs Sorting an Array

Both can give you ordered data. But they're optimized for different access patterns.

Quick Answer

  • Need all elements sorted → sort the array once
  • Need only the min/max repeatedly → use a Heap
  • Streaming data (elements arrive over time) → use a Heap
  • Static data, one-time sort → use Array.sort

Performance Comparison

OperationArray.sortHeap
Sort all elementsO(n log n)O(n log n)
Insert 1 element (keep sorted)O(n log n) or O(n)*O(log n)
Get min/maxO(1)O(1)
Remove min/maxO(n)O(log n)
Get top-k from n elementsO(n log n)O(n log k)

*O(n) if you binary-search + splice; O(n log n) if you push + re-sort.

Example: Top-K Scores

Array approach

// ❌ Sort everything, take first k
function topK_array(scores: number[], k: number): number[] {
return scores.sort((a, b) => b - a).slice(0, k);
// O(n log n) — sorts ALL elements even if k is small
}

Heap approach

import { MinHeap } from 'data-structure-typed';

// ✅ Only maintain k elements in the heap
function topK_heap(scores: number[], k: number): number[] {
const heap = new MinHeap<number>();
for (const score of scores) {
heap.add(score);
if (heap.size > k) heap.poll();
}
return heap.toArray().sort((a, b) => b - a);
// O(n log k) — much faster when k << n
}

For 1,000,000 elements with k=10: array sorts all 1M elements. Heap only maintains 10.

Example: Streaming Data

import { MinHeap } from 'data-structure-typed';

// New scores arrive continuously
const liveScores = new MinHeap<number>();

// Each insert: O(log n)
liveScores.add(85);
liveScores.add(92);
liveScores.add(78);

// Current lowest: O(1)
liveScores.peek(); // 78

// Process lowest: O(log n)
liveScores.poll(); // 78

With an array, you'd re-sort after every insert — O(n log n) each time.

When to Use Each

ScenarioUse Array.sortUse Heap
One-time sort of static data
Repeated insert + get min/max
Top-k from large dataset❌ (k << n)
Streaming / real-time data
Need sorted iteration of ALL elements
Dijkstra / A* algorithm
Simple, small dataset (< 100)Either