timsort-node v1.0.3
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-nodeIn 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.jsIf 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
