## Median

Computes the median of an array.

### Installation

```
$ npm install compute-median
```

For use in the browser, use browserify.

### Usage

```
var median = require( 'compute-median' );
```

##### median( arr[, options] )

Computes the median of an `array`

. For unsorted primitive number `arrays`

,

```
var unsorted = [ 5, 3, 2, 4 ];
var m1 = median( unsorted );
```

The function accepts two `options`

:

`sorted`

: `boolean`

flag indicating if the input `array`

is sorted in **ascending** order. Default: `false`

.`accessor`

: accessor `function`

for accessing values in object `arrays`

.

If the input `array`

is already sorted in **ascending** order, set the `sorted`

option to `true`

.

```
var sorted = [ 2, 3, 4, 5 ];
var m2 = median( sorted, {
'sorted': true,
});
```

For object `arrays`

, provide an accessor `function`

for accessing numeric `array`

values

```
var data = [
[1,5],
[3,3],
[4,2],
[5,4],
];
function getValue( d ) {
return d[ 1 ];
}
var m3 = median( data, {
'sorted': false,
'accessor': getValue
});
```

**Note**: if provided an empty `array`

, the function returns `null`

.

### Examples

```
var median = require( 'compute-median' );
var data = new Array( 1001 );
for ( var i = 0; i < data.length; i++ ) {
data[ i ] = Math.round( Math.random() * 100 );
}
console.log( median( data ) );
```

To run the example code from the top-level application directory,

```
$ node ./examples/index.js
```

### Notes

For an input `array`

of length `N`

,

- if provided a sorted (in
**ascending** order) numeric `array`

, the function is `O(1)`

. - if provided a sorted object
`array`

, the function is `O(N)`

. - if provided an unsorted numeric
`array`

, the function is `O( N log(N) )`

. - if provided an unsorted object
`array`

, the function is `O( N + N log(N) )`

.

### Tests

#### Unit

Unit tests use the Mocha test framework with Chai assertions. To run the tests, execute the following command in the top-level application directory:

```
$ make test
```

All new feature development should have corresponding unit tests to validate correct functionality.

#### Test Coverage

This repository uses Istanbul as its code coverage tool. To generate a test coverage report, execute the following command in the top-level application directory:

```
$ make test-cov
```

Istanbul creates a `./reports/coverage`

directory. To access an HTML version of the report,

```
$ make view-cov
```

### License

MIT license.

### Copyright

Copyright © 2014-2015. Athan Reines.