Skip to content

Commit 4a4c4d7

Browse files
committed
fix: fix bucket sort
1 parent c5a8531 commit 4a4c4d7

File tree

1 file changed

+25
-10
lines changed

1 file changed

+25
-10
lines changed
Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,39 @@
11
package com.example.algorithm.sort;
22

33
import java.util.ArrayList;
4+
import java.util.Arrays;
45
import java.util.LinkedList;
56

67
public class BucketSort {
78
public static Double[] bucketSort(Double[] array) {
8-
var size = array.length;
9-
var bucket = new ArrayList<LinkedList<Double>>();
10-
for (var i = 0; i < size; i++) {
11-
bucket.add(new LinkedList<>());
9+
int size = array.length;
10+
double min = Arrays.stream(array).min(Double::compare).orElse(0.0);
11+
double max = Arrays.stream(array).max(Double::compare).orElse(0.0);
12+
double range = max - min;
13+
14+
// initialize buckets
15+
ArrayList<LinkedList<Double>> buckets = new ArrayList<LinkedList<Double>>();
16+
for (int i = 0; i < size; i++) {
17+
buckets.add(new LinkedList<>());
1218
}
1319

14-
for (var k : array) {
15-
var list = bucket.get((int) Math.floor(size * k));
16-
list.add(k);
20+
// distribute array elements into buckets
21+
for (Double k : array) {
22+
int index = (int) Math.floor(size * ((k - min) / range));
23+
if (index == size) {
24+
index--;
25+
}
26+
buckets.get(index).add(k);
1727
}
1828

19-
for (var i = 0; i < size; i++) {
20-
InsertionSort.insertionSort(array);
29+
// sort individual buckets using insertion sort
30+
for (int i = 0; i < size; i++) {
31+
Double[] bucketArray = buckets.get(i).toArray(new Double[0]);
32+
InsertionSort.insertionSort(bucketArray);
33+
buckets.set(i, new LinkedList<>(Arrays.asList(bucketArray)));
2134
}
22-
return array;
35+
36+
// concatenate all buckets
37+
return buckets.stream().flatMap(LinkedList::stream).toArray(Double[]::new);
2338
}
2439
}

0 commit comments

Comments
 (0)