@@ -3,21 +3,26 @@ import Sort from '../Sort';
3
3
export default class CountingSort extends Sort {
4
4
/**
5
5
* @param {number[] } originalArray
6
+ * @param {number } [smallestElement]
6
7
* @param {number } [biggestElement]
7
8
*/
8
- sort ( originalArray , smallestElement = 0 , biggestElement = 0 ) {
9
- // Detect biggest element in array in order to build number bucket array later.
10
- let detectedSmallestElement = smallestElement ;
11
- let detectedBiggestElement = biggestElement ;
12
- if ( ! detectedBiggestElement ) {
9
+ sort ( originalArray , smallestElement = undefined , biggestElement = undefined ) {
10
+ // Init biggest and smallest elements in array in order to build number bucket array later.
11
+ let detectedSmallestElement = smallestElement || 0 ;
12
+ let detectedBiggestElement = biggestElement || 0 ;
13
+
14
+ if ( smallestElement === undefined || biggestElement === undefined ) {
13
15
originalArray . forEach ( ( element ) => {
14
16
// Visit element.
15
17
this . callbacks . visitingCallback ( element ) ;
16
18
19
+ // Detect biggest element.
17
20
if ( this . comparator . greaterThan ( element , detectedBiggestElement ) ) {
18
21
detectedBiggestElement = element ;
19
22
}
20
- if ( this . comparator . greaterThan ( detectedSmallestElement , element ) ) {
23
+
24
+ // Detect smallest element.
25
+ if ( this . comparator . lessThan ( element , detectedSmallestElement ) ) {
21
26
detectedSmallestElement = element ;
22
27
}
23
28
} ) ;
@@ -26,6 +31,7 @@ export default class CountingSort extends Sort {
26
31
// Init buckets array.
27
32
// This array will hold frequency of each number from originalArray.
28
33
const buckets = Array ( detectedBiggestElement - detectedSmallestElement + 1 ) . fill ( 0 ) ;
34
+
29
35
originalArray . forEach ( ( element ) => {
30
36
// Visit element.
31
37
this . callbacks . visitingCallback ( element ) ;
0 commit comments