/* @flow */ import modeSorted from "./mode_sorted"; import numericSort from "./numeric_sort"; /** * The [mode](http://bit.ly/W5K4Yt) is the number that appears in a list the highest number of times. * There can be multiple modes in a list: in the event of a tie, this * algorithm will return the most recently seen mode. * * This is a [measure of central tendency](https://en.wikipedia.org/wiki/Central_tendency): * a method of finding a typical or central value of a set of numbers. * * This runs on `O(nlog(n))` because it needs to sort the array internally * before running an `O(n)` search to find the mode. * * @param {Array} x input * @returns {number} mode * @example * mode([0, 0, 1]); // => 0 */ function mode(x /*: Array */) /*:number*/ { // Sorting the array lets us iterate through it below and be sure // that every time we see a new number it's new and we'll never // see the same number twice return modeSorted(numericSort(x)); } export default mode;