Skip to content

Commit 6dbc0cd

Browse files
authored
Merge pull request dubesar#493 from gabsoares11/patch-1
ExtendedCountingSort
2 parents e80a531 + 6ba3d43 commit 6dbc0cd

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

Sorting/ExtendedCountingSort.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
public class ExtendedCountingSort {
2+
3+
public void sort(Integer[] array, int leftIndex, int rightIndex) {
4+
if (array.length > 0) {
5+
Integer biggest = biggestInt(array, leftIndex, rightIndex);
6+
Integer smallest = smallestInt(array, leftIndex, rightIndex);
7+
8+
Integer[] c = new Integer[biggest - smallest + 1];
9+
Integer[] b = new Integer[array.length];
10+
11+
Arrays.fill(c, 0);
12+
13+
for (int i = leftIndex; i <= rightIndex; i++) {
14+
c[array[i] - smallest] += 1;
15+
}
16+
17+
for (int i = 1; i < c.length; i++) {
18+
c[i] += c[i - 1];
19+
}
20+
21+
for (int i = rightIndex; i >= leftIndex; i--) {
22+
b[c[array[i] - smallest] - 1] = array[i];
23+
c[array[i] - smallest] -= 1;
24+
}
25+
26+
for (int i = 0; i < b.length; i++) {
27+
array[i] = b[i];
28+
}
29+
}
30+
}
31+
32+
private Integer smallestInt(Integer[] array, int leftIndex, int rightIndex) {
33+
int m = array[leftIndex];
34+
35+
for (int i = leftIndex; i <= rightIndex ; i++) {
36+
if (array[i] < m) { m = array[i]; }
37+
}
38+
39+
return m;
40+
}
41+
42+
private Integer biggestInt(Integer[] array, int leftIndex, int rightIndex) {
43+
int k = array[leftIndex];
44+
45+
for (int i = leftIndex; i <= rightIndex ; i++) {
46+
if (array[i] > k) { k = array[i]; }
47+
}
48+
49+
return k;
50+
}
51+
52+
}

0 commit comments

Comments
 (0)