Skip to content

Commit 65c14b6

Browse files
committed
add bucket sort
1 parent bcfb6cd commit 65c14b6

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed

bucket-sort/javascript/bucket-sort.js

+84
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
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

Comments
 (0)