2
class CountingSort {
int[] csort(int[] arr) {
int n = arr.length;
int max = arr[0];
int[] out = new int[n];
for (int i : arr) {
if (max < i) {
max = i;
}
}
int range = max + 1;
int[] te = new int[range];
for (int i = 0; i < range; ++i) {
te[i] = 0;
}
for (int j = 1; j < n; j++) {
te[arr[j]] = te[arr[j]] + 1;
}
// case1: {0,0,0,1,0,1,1,0,1,1}
// case2: {0,0,0,1,0,1,1,0,1,1}
for (int k = 1; k < range; ++k) {
te[k] = te[k] + te[k - 1];
}
// case1: {0,0,0,1,1,2,3,3,4,5}
// case2: {0,0,0,1,1,2,3,3,4,5}
for (int l = n - 1; l >= 0; --l) {
out[te[arr[l]]] = arr[l];
te[arr[l]] = te[arr[l]] - 1;
}
return out;
}
}
위의 코드는 정렬 계산을위한 코드입니다. 다음 나의 관찰은분류 Java 계산 - 예기치 않은 결과
- 가 최소가 첫 번째 요소의 예
{1, 6, 8, 3, 5, 9}
되도록 입력 배열이 예상 출력을{1, 3, 5, 6, 8, 9}
- 을 제공하지만 입력 배열을 주면 첫 번째 요소는 다음 출력 작은 예를 들어
{4, 6, 8, 3, 5, 9}
되지 않도록 있습니다 첫 번째 요소는 0이고 한 숫자는 누락됩니다. 시도했지만 어떻게 이런 일이 있는지 찾을 수 없습니다.
합니다. 코드를 단계별로 실행하고 원하는 변수가없는 변수를 확인합니다. – Pshemo