@@ -3,21 +3,26 @@ import Sort from '../Sort';
33export default class CountingSort extends Sort {
44 /**
55 * @param {number[] } originalArray
6+ * @param {number } [smallestElement]
67 * @param {number } [biggestElement]
78 */
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 ) {
1315 originalArray . forEach ( ( element ) => {
1416 // Visit element.
1517 this . callbacks . visitingCallback ( element ) ;
1618
19+ // Detect biggest element.
1720 if ( this . comparator . greaterThan ( element , detectedBiggestElement ) ) {
1821 detectedBiggestElement = element ;
1922 }
20- if ( this . comparator . greaterThan ( detectedSmallestElement , element ) ) {
23+
24+ // Detect smallest element.
25+ if ( this . comparator . lessThan ( element , detectedSmallestElement ) ) {
2126 detectedSmallestElement = element ;
2227 }
2328 } ) ;
@@ -26,6 +31,7 @@ export default class CountingSort extends Sort {
2631 // Init buckets array.
2732 // This array will hold frequency of each number from originalArray.
2833 const buckets = Array ( detectedBiggestElement - detectedSmallestElement + 1 ) . fill ( 0 ) ;
34+
2935 originalArray . forEach ( ( element ) => {
3036 // Visit element.
3137 this . callbacks . visitingCallback ( element ) ;
0 commit comments