배열의 숫자를 오름차순으로 정렬해야하고 시간 복잡성은 O (n)이어야합니다. 기수 정렬을 사용하고 있으며 충분히 빠르지 않습니다. 어떤 아이디어로 내 코드를 더 빨리 만들 수 있습니까? 여기입니다 :C에서 느린 기수 정렬
void radix(int *a, int n) {
int i;
int sorted[n];
int number = 1;
int biggestNumber = -1;
for(i = 0; i < n; i++){
if(a[i] > biggestNumber)
biggestNumber = a[i]; }
while (biggestNumber/number > 0){
int bucket[10] = { 0 };
for (i = 0; i < n; i++)
bucket[(a[i]/number) % 10]++;
for (i = 1; i < 10; i++)
bucket[i] += bucket[i - 1];
for (i = n - 1; i >= 0; i--)
sorted[--bucket[(a[i]/number) % 10]] = a[i];
for (i = 0; i < n; i++)
a[i] = sorted[i];
number*= 10; } }
기능이 작동합니까? 그런 다음 [코드 검토] (http://codereview.stackexchange.com/tour)에 대신 게시해야합니다. –
기존 코드의 속도를 높이는 방법을 묻는 중이거나보다 효율적인 정렬 알고리즘을 묻는 중입니까? –
"충분히 빠르지 않다"는 것은 무엇을 의미합니까? 시간 제한이있는 온라인 교육 기관과 같습니까? 아니면 "충분히 빠르다"를 어떻게 정의합니까? – hyde