1
+ let firstArray = [ ]
2
+ let secondArray = [ 1 , 1 , 19 , 4 , 5 ]
3
+ let thirdArray = [ - 1 , 2 , 4 , - 5 , 10 ]
4
+ let fourthArray = [ - 1 , - 5 , - 12 , - 2 , 0 ]
5
+ let fifthArray = [ 0.897 , 0.565 , 0.656 , 0.1234 , 0.665 , 0.3434 ]
6
+
7
+ // Generate an array with random numbers
8
+ for ( let i = 0 ; i < 5 ; i ++ ) {
9
+ firstArray . push ( Math . round ( Math . random ( ) * 100 ) )
10
+ }
11
+
12
+ console . log ( `Before sort 1 array: ${ firstArray } \nBefore sort 2 array: ${ secondArray } \nBefore sort 3 array: ${ thirdArray } \nBefore sort 4 array: ${ fourthArray } \nBefore sort 5 array: ${ fifthArray } ` )
13
+
14
+ function bucketSort ( arr ) {
15
+ if ( arr . length === 0 ) {
16
+ return arr
17
+ }
18
+
19
+ // Declaring vars
20
+ var i ,
21
+ minValue = arr [ 0 ] ,
22
+ maxValue = arr [ 0 ] ,
23
+ bucketSize = bucketSize || 5
24
+
25
+ // Setting min and max values
26
+ arr . forEach ( function ( currentVal ) {
27
+ if ( currentVal < minValue ) {
28
+ minValue = currentVal
29
+ } else if ( currentVal > maxValue ) {
30
+ maxValue = currentVal
31
+ }
32
+ } )
33
+
34
+ // Initializing buckets
35
+ let bucketCount = Math . floor ( ( maxValue - minValue ) / bucketSize ) + 1
36
+ let allBuckets = new Array ( bucketCount )
37
+
38
+ for ( i = 0 ; i < allBuckets . length ; i ++ ) {
39
+ allBuckets [ i ] = [ ]
40
+ }
41
+
42
+ // Pushing values to buckets
43
+ arr . forEach ( function ( currentVal ) {
44
+ allBuckets [ Math . floor ( ( currentVal - minValue ) / bucketSize ) ] . push ( currentVal )
45
+ } )
46
+
47
+ // Sorting buckets
48
+ arr . length = 0
49
+
50
+ allBuckets . forEach ( function ( bucket ) {
51
+ insertionSort ( bucket ) ;
52
+ bucket . forEach ( function ( element ) {
53
+ arr . push ( element )
54
+ } )
55
+ } )
56
+
57
+ return arr
58
+ }
59
+
60
+ // InsertionSort to be used within bucket sort
61
+ function insertionSort ( arr ) {
62
+ let key , j
63
+ for ( let i = 1 ; i < arr . length ; i ++ ) {
64
+ key = arr [ i ]
65
+ j = i - 1
66
+
67
+ while ( j >= 0 && arr [ j ] > key ) {
68
+ arr [ j + 1 ] = arr [ j ]
69
+ j = j - 1
70
+ }
71
+ arr [ j + 1 ] = key
72
+ }
73
+ return arr
74
+ }
75
+
76
+ // Test
77
+ bucketSort ( firstArray )
78
+ bucketSort ( secondArray )
79
+ bucketSort ( thirdArray )
80
+ bucketSort ( fourthArray )
81
+ bucketSort ( fifthArray )
82
+
83
+ console . log ( `After sort 1 array: ${ firstArray } \nAfter sort 2 array: ${ secondArray } \nAfter sort 3 array: ${ thirdArray } \nAfter sort 4 array: ${ fourthArray } \nAfter sort 5 array: ${ fifthArray } ` )
84
+
0 commit comments