Skip to content

Commit 3716e56

Browse files
authored
chore: Merge pull request TheAlgorithms#636 from qingwen23/find-average-median
Added averageMedian function
2 parents 2d0da4d + 937b472 commit 3716e56

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

Maths/AverageMedian.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* Median: https://en.wikipedia.org/wiki/Median
3+
*
4+
* function averageMedian
5+
* to find the median value of an array of numbers
6+
* the numbers in an array will be sorted in ascending order by the function sortNumbers
7+
* if the length of the array is even number, the median value will be the average of the two middle numbers
8+
* else if the length of the array is odd number, the median value will be the middle number in the array
9+
*/
10+
11+
/*
12+
* Doctests
13+
*
14+
* > averageMedian([8, 9, 1, 2, 5, 10, 11])
15+
* 8
16+
* > averageMedian([15, 18, 3, 9, 13, 5])
17+
* 11
18+
* > averageMedian([1,2,3,4,6,8])
19+
* 3.5
20+
*/
21+
22+
const averageMedian = (numbers) => {
23+
let median = 0; const numLength = numbers.length
24+
numbers = numbers.sort(sortNumbers)
25+
26+
if (numLength % 2 === 0) {
27+
median = (numbers[numLength / 2 - 1] + numbers[numLength / 2]) / 2
28+
} else {
29+
median = numbers[(numLength - 1) / 2]
30+
}
31+
32+
return median
33+
}
34+
35+
const sortNumbers = (num1, num2) => {
36+
return num1 - num2
37+
}
38+
39+
export { averageMedian }

Maths/test/AverageMedian.test.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { averageMedian } from '../AverageMedian'
2+
3+
test('should return the median of an array of numbers:', () => {
4+
const medianValue = averageMedian([1, 2, 6, 4, 5])
5+
expect(medianValue).toBe(4)
6+
})
7+
8+
test('should return the median of an array of numbers:', () => {
9+
const medianValue = averageMedian([8, 9, 1, 2, 5, 10, 11])
10+
expect(medianValue).toBe(8)
11+
})
12+
13+
test('should return the median of an array of numbers:', () => {
14+
const medianValue = averageMedian([15, 18, 3, 9, 13, 5])
15+
expect(medianValue).toBe(11)
16+
})
17+
18+
test('should return the median of an array of numbers:', () => {
19+
const medianValue = averageMedian([1, 2, 3, 4, 6, 8])
20+
expect(medianValue).toBe(3.5)
21+
})

0 commit comments

Comments
 (0)