-
Notifications
You must be signed in to change notification settings - Fork 181
/
Copy pathBucketSort.js
50 lines (49 loc) · 1.15 KB
/
BucketSort.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
const arr = [5, 3, 1, 2, 4, 7, 6];
// bucket sort algo
const bucketSort = (arr) => {
if (arr.length === 0) {
return arr;
}
let i,
minValue = arr[0],
maxValue = arr[0],
bucketSize = 5;
arr.forEach(function (currentVal) {
if (currentVal < minValue) {
minValue = currentVal;
} else if (currentVal > maxValue) {
maxValue = currentVal;
}
});
let bucketCount = Math.floor((maxValue - minValue) / bucketSize) + 1;
let allBuckets = new Array(bucketCount);
for (i = 0; i < allBuckets.length; i++) {
allBuckets[i] = [];
}
arr.forEach(function (currentVal) {
allBuckets[Math.floor((currentVal - minValue) / bucketSize)].push(
currentVal
);
});
arr.length = 0;
allBuckets.forEach(function (bucket) {
insertion(bucket);
bucket.forEach(function (element) {
arr.push(element);
});
});
return arr;
};
const insertion = (arr) => {
let length = arr.length;
let i, j;
for (i = 1; i < length; i++) {
let temp = arr[i];
for (j = i - 1; j >= 0 && arr[j] > temp; j--) {
arr[j + 1] = arr[j];
}
arr[j + 1] = temp;
}
return arr;
};
console.log(bucketSort(arr));