0
저는 계산 방식을 구현하려고 노력해 왔습니다.정렬 관련 메모리 관련 오류가 있습니까?
사용자가 프로그램을 실행해야하는 횟수 n
을 사용자에게 요청합니다. 정렬 할 요소의 수 sz
과 최대 값이 k
인 요소입니다. 프로그램이 올바르게 실행되면 n = 1
, 즉 한 번 실행하면되지만 다른 경우에는 오류가 발생합니다.
#include <stdio.h>
#include <stdlib.h>
void cntsrt(int a[], int b[], int k);
int sz;
int main(int argc, char **argv) {
int n, k,*b, *a, i, j;
scanf("%d", &n);
while (n--) {
scanf("%d", &sz);
scanf("%d", &k);
a = (int *) calloc(sz + 1, sizeof(int));
for (i = 1; i <= sz; i++)
scanf("%d", &a[i]);
b = (int *) calloc(sz + 1, sizeof(int));
cntsrt(a, b, k);
printf("\n");
for (j = 1; j <= sz; j++)
printf("\t%d", b[j]);
free((void*)a);
free((void*)b);
}
printf("\n");
return 0;
}
void cntsrt(int a[], int b[], int k) {
int i, j,*c;
c = (int*) malloc(k*(sizeof(int)));
for (i = 0; i <= k; i++)
c[i] = 0;
for (j = 1; j <= sz; j++)
c[a[j]] = c[a[j]] + 1;
for (i = 1; i <= k; i++)
c[i] = c[i] + c[i - 1];
for (j = 8; j > 0; j--) {
b[c[a[j]]] = a[j];
c[a[j]] = c[a[j]] - 1;
}
}