npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

blitz-sort

v3.0.2

Published

Ultra-fast sorting library for JavaScript - up to 159x faster, averaging 19.9x speedup

Readme

blitz-sort

English | 简体中文

Ultra-fast sorting library for JavaScript. Up to 159x faster, averaging 19.9x speedup over V8's native .sort().

Achieves superior performance through type-specific algorithms (radix sort, counting sort, pattern detection, etc.).

Features

  • Multi-type support: Uint32, Float64, strings, and objects
  • Adaptive algorithms: Automatically selects the best algorithm based on data size and distribution
  • Pattern detection: Instant handling of sorted/reversed arrays
  • Zero dependencies: Pure JavaScript, no external dependencies
  • In-place sorting: Minimal memory overhead

Installation

npm install blitz-sort

Usage

const { ultraSort, sortUint32, sortFloat64, sortStrings, sortObjects } = require('blitz-sort');

// Integer arrays
const integers = new Uint32Array([3, 1, 4, 1, 5, 9, 2, 6]);
ultraSort(integers);
// => Uint32Array [1, 1, 2, 3, 4, 5, 6, 9]

// Float arrays
const floats = new Float64Array([3.14, -2.71, 1.41, -0.5]);
ultraSort(floats);
// => Float64Array [-2.71, -0.5, 1.41, 3.14]

// String arrays
const strings = ['banana', 'apple', 'cherry', 'date'];
ultraSort(strings);
// => ['apple', 'banana', 'cherry', 'date']

// Object arrays with key function
const users = [
  { name: 'Alice', age: 30 },
  { name: 'Bob', age: 25 },
  { name: 'Charlie', age: 35 }
];
ultraSort(users, { by: u => u.age });
// => [{ name: 'Bob', age: 25 }, { name: 'Alice', age: 30 }, { name: 'Charlie', age: 35 }]

// Descending order
ultraSort(integers, { descending: true });
// => Uint32Array [9, 6, 5, 4, 3, 2, 1, 1]

API

ultraSort(arr, options?)

Main sorting function that auto-detects array type and applies the optimal algorithm.

Parameters:

  • arr - Array to sort (mutates in place)
  • options.by - Key extraction function for object sorting
  • options.descending - Sort in descending order (default: false)

Returns: The sorted array

sortUint32(arr)

Optimized sorting for Uint32Array. Uses:

  • Insertion sort for n ≤ 32
  • Counting sort for dense integer ranges
  • Radix sort for large arrays (n ≥ 5000)

sortFloat64(arr)

Optimized sorting for Float64Array. Includes pattern detection for sorted/reversed arrays.

sortStrings(arr)

Optimized string sorting. Uses:

  • Insertion sort for n ≤ 32
  • MSD Radix sort for large arrays (n ≥ 1000)

sortObjects(arr, keyFn)

Object sorting using Schwartzian transform for string keys to avoid redundant key computation.

Algorithm Selection

| Data Type | Size | Algorithm | |-----------|------|-----------| | Uint32 | n ≤ 32 | Insertion Sort | | Uint32 | 33-256 | V8 Native | | Uint32 | Dense range | Counting Sort | | Uint32 | n ≥ 5000 | LSD Radix Sort | | Float64 | All | Pattern Detection + V8 Native | | String | n ≤ 32 | Insertion Sort | | String | n ≥ 1000 | MSD Radix Sort | | Object | Numeric key | V8 Native | | Object | String key | Schwartzian Transform |

Performance

Benchmarks comparing blitz-sort vs V8 native .sort():

Integer (Uint32Array)

| Test Case | 10K | 100K | 1M | |-----------|-----|------|-----| | Dense integers | 4.9x | 14.2x | 17.0x | | Sparse integers | 1.8x | 14.7x | 15.7x | | Already sorted | 4.0x | 63.7x | 73.2x | | Reversed | 2.2x | 40.1x | 50.4x | | Many duplicates | 32.3x | 39.8x | 52.3x |

Float (Float64Array)

| Test Case | 10K | 100K | 1M | |-----------|-----|------|-----| | Random floats | 1.0x | 1.0x | 1.0x | | Already sorted | 6.0x | 149.6x | 159.4x | | Mixed pos/neg | 1.0x | 1.0x | 1.0x |

String

| Test Case | 10K | 50K | 100K | |-----------|-----|-----|------| | Random strings | 2.4x | 3.0x | 3.6x | | Already sorted | 0.8x | 2.6x | 2.7x | | Common prefix | 1.1x | 1.2x | 1.4x |

Object

| Test Case | 10K | 50K | 100K | |-----------|-----|-----|------| | By numeric field | 1.1x | 1.1x | 1.2x | | By string field | 1.4x | 1.4x | 2.1x |

Average speedup: 19.9x

Run npm run benchmark to see results on your machine.

How It Works

Pattern Detection

Before sorting, the library samples the first 32 elements to detect:

  • Sorted arrays: Return immediately
  • Reversed arrays: Simple O(n) reverse operation
  • Random arrays: Apply full sorting algorithm

Radix Sort for Integers

For large integer arrays, LSD (Least Significant Digit) radix sort processes numbers byte-by-byte, achieving O(n) time complexity for bounded integers.

MSD Radix Sort for Strings

For large string arrays, MSD (Most Significant Digit) radix sort groups strings by character position, recursively sorting each bucket.

Schwartzian Transform for Objects

When sorting objects by a string key, pre-computes all keys once to avoid redundant keyFn calls during comparisons.

Requirements

  • Node.js >= 14.0.0
  • Uses BigUint64Array for float-to-int conversion

License

MIT