public void bestRadixSort(int[] data) {
int digit = 0;
for (int i = 0; i < data.length; i++) {
int length = String.valueOf(data[i]).length();
if (length > digit) {
digit = length;
}
}
for (int i = 0; i < digit; i++) {
int[] digitData = new int[data.length];
for (int j = 0; j < data.length; j++) {
int idx = (int) ((data[j] % Math.pow(10, i + 1)) / Math.pow(10, i));
digitData[j] = idx;
}
data = countingSort(digitData, data, 10);
}
}
public int[] countingSort(int[] data, int[] originalData, int k) {
int count[] = new int[k];
for (int i = 0; i < data.length; i++)
count[data[i]]++;
for (int i = 1; i < k; i++)
count[i] += count[i - 1];
int sorted[] = new int[data.length];
for (int i = data.length - 1; i >= 0; i--) {
sorted[--count[data[i]]] = originalData[i];
//sorted[--count[data[i]]] = data[i];
}
return sorted;
}
int digit = 0;
for (int i = 0; i < data.length; i++) {
int length = String.valueOf(data[i]).length();
if (length > digit) {
digit = length;
}
}
for (int i = 0; i < digit; i++) {
int[] digitData = new int[data.length];
for (int j = 0; j < data.length; j++) {
int idx = (int) ((data[j] % Math.pow(10, i + 1)) / Math.pow(10, i));
digitData[j] = idx;
}
data = countingSort(digitData, data, 10);
}
}
public int[] countingSort(int[] data, int[] originalData, int k) {
int count[] = new int[k];
for (int i = 0; i < data.length; i++)
count[data[i]]++;
for (int i = 1; i < k; i++)
count[i] += count[i - 1];
int sorted[] = new int[data.length];
for (int i = data.length - 1; i >= 0; i--) {
sorted[--count[data[i]]] = originalData[i];
//sorted[--count[data[i]]] = data[i];
}
return sorted;
}
'프로그래밍 > 알고리즘' 카테고리의 다른 글
다익스트라(Dijkstra Algorithm) (0) | 2017.02.24 |
---|---|
DFS(미로찾기) (0) | 2017.02.24 |
이진트리(BinaryTree) (0) | 2017.02.24 |
quickSort (0) | 2017.02.24 |
Queue (0) | 2017.02.24 |