timsort-node
v1.0.3
Published
Allows the use of Python's Timsort Algorithm in Javascript.
Downloads
10
Maintainers
Readme
timSort-node: Node.js Package for Python's Sorting Algorithm, Timsort
Timsort is Python's default sorting algorithm (.sort()
), later adopted by Java in SE 7. It was designed by Tim Peters (of, "The Zen of Python") "outside" of the laboratory in order to approach data more likely to be encountered in real-world scenarios. Timsort is stable and as fast as merge sort, with an average big-O of O(n log n)
. The original algorithm was written by Peters in C and can be found here.
Installing
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
Install package with:
npm install --save timsort-node
In example.js
, a few examples are shown. You may also require arrayCreator.js
, which creates a randomized array based on two params, length
and maxNum
. (The latter defines how high you want the numbers to go).
To run:
const timSort = require('timsort-node')
let array = [4, 6, 9, 2] //or any array
timSort(array) //results in: [2, 4, 6, 9]
For randomizing:
let arrayRandom = randomArray(10000, 10000)
timSort(arrayRandom)
...
Running Tests
index.test.js
provides three tests for benchmarking purposes, and personalized tests may be generated. Simply follow the sytax, making sure to use assert.deepEqual
and the compare
helper function when using Javascript's built-in .sort()
method:
let array = [someArray]
...
assert.deepEqual(timSort(array), array.sort(compare)) //where 'compare' is predefined at the beginning of index.test.js
If the dependency for running tests (Mocha or Jest) is properly installed, simply write your tests and run npm run test
in the console/terminal. (Currently, the package.json
scripts
is set to recognize Jest as the testing framework.) Alternatively, you may run jest test/index.text.js --watch
to keep the testing environment running during changes.
Contributing
Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests.
License
This project is licensed under the MIT License - see the LICENSE.md file for details
Acknowledgments
- This gist as initial inspiration