Socket
Socket
Sign inDemoInstall

quickselect

Package Overview
Dependencies
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

quickselect - npm Package Compare versions

Comparing version 2.0.0 to 3.0.0

index.d.ts

54

index.js
export default function quickselect(arr, k, left, right, compare) {
quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare);
}
/**
* Rearranges items so that all items in the [left, k] are the smallest.
* The k-th element will have the (k - left + 1)-th smallest value in [left, right].
*
* @template T
* @param {T[]} arr the array to partially sort (in place)
* @param {number} k middle index for partial sorting (as defined above)
* @param {number} [left=0] left index of the range to sort
* @param {number} [right=arr.length-1] right index
* @param {(a: T, b: T) => number} [compare = (a, b) => a - b] compare function
*/
export default function quickselect(arr, k, left = 0, right = arr.length - 1, compare = defaultCompare) {
function quickselectStep(arr, k, left, right, compare) {
while (right > left) {
if (right - left > 600) {
var n = right - left + 1;
var m = k - left + 1;
var z = Math.log(n);
var s = 0.5 * Math.exp(2 * z / 3);
var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);
var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));
var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));
quickselectStep(arr, k, newLeft, newRight, compare);
const n = right - left + 1;
const m = k - left + 1;
const z = Math.log(n);
const s = 0.5 * Math.exp(2 * z / 3);
const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);
const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));
const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));
quickselect(arr, k, newLeft, newRight, compare);
}
var t = arr[k];
var i = left;
var j = right;
const t = arr[k];
let i = left;
/** @type {number} */
let j = right;

@@ -46,4 +54,10 @@ swap(arr, left, k);

/**
* @template T
* @param {T[]} arr
* @param {number} i
* @param {number} j
*/
function swap(arr, i, j) {
var tmp = arr[i];
const tmp = arr[i];
arr[i] = arr[j];

@@ -53,4 +67,10 @@ arr[j] = tmp;

/**
* @template T
* @param {T} a
* @param {T} b
* @returns {number}
*/
function defaultCompare(a, b) {
return a < b ? -1 : a > b ? 1 : 0;
}
{
"name": "quickselect",
"version": "2.0.0",
"version": "3.0.0",
"type": "module",
"description": "A tiny and fast selection algorithm in JavaScript.",
"repository": "github:mourner/quickselect",
"module": "index.js",
"main": "quickselect.js",
"dependencies": {},
"main": "index.js",
"exports": "./index.js",
"devDependencies": {
"eslint": "^4.19.1",
"eslint-config-mourner": "^2.0.3",
"esm": "^3.0.15",
"rollup": "^0.57.1",
"tape": "^4.9.0"
"eslint": "^9.6.0",
"eslint-config-mourner": "^4.0.1",
"esm": "^3.2.25",
"rollup": "^4.18.0",
"tape": "^5.8.1",
"typescript": "^5.5.3"
},
"eslintConfig": {
"extends": "mourner",
"parserOptions": {
"sourceType": "module"
}
},
"scripts": {
"pretest": "eslint index.js test.js bench.js",
"test": "node -r esm test.js",
"bench": "node -r esm bench.js",
"build": "rollup -c",
"prepublishOnly": "npm run build"
"pretest": "eslint *.js && tsc",
"test": "node test.js",
"bench": "node bench.js"
},
"files": [
"index.js",
"quickselect.js"
"index.d.ts"
],
"types": "index.d.ts",
"keywords": [

@@ -33,0 +29,0 @@ "selection",

@@ -1,2 +0,2 @@

## quickselect [![Build Status](https://travis-ci.org/mourner/quickselect.svg?branch=master)](https://travis-ci.org/mourner/quickselect)
## quickselect

@@ -22,3 +22,3 @@ A tiny and fast [selection algorithm](https://en.wikipedia.org/wiki/Selection_algorithm) in JavaScript

```js
var arr = [65, 28, 59, 33, 21, 56, 22, 95, 50, 12, 90, 53, 28, 77, 39];
const arr = [65, 28, 59, 33, 21, 56, 22, 95, 50, 12, 90, 53, 28, 77, 39];

@@ -25,0 +25,0 @@ quickselect(arr, 8);

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc