나는 며칠 동안 아래 질문에 갇혔다. 기수 정렬을 구현하기 위해 C를 사용했습니다. 한 줄의 코드 만 제외하고 모든 것이 잘되었습니다. 이 문제를 해결할 수 있도록 도와 주시겠습니까?C를 사용하여 기수 정렬 구현
제 문제는 radix_sort 함수의 첫 번째 줄에 있습니다. int semi_sort[12]
을 사용하는 동안 프로그램을 올바르게 실행할 수 있습니다. 그러나, 내가 함수에 전달 된 크기 변수를 사용하고 싶습니다. 그러나 int semi_sort[12]
대신 int semi_sort[size]
을 사용하면 프로그램이 중단됩니다. 아무도 왜 그런지 말할 수 있습니까? 그건 그렇고, 난 this link,이 저자의 코드에, 그는 int semiSorted[size]
짓을 참조했다. 이번에이 코드 라인이 작동하는 이유는 무엇입니까?
미리 감사드립니다.
#include <stdio.h>
#include <stdlib.h>
#define bucket_size 10
int find_the_largest(int arr[],int size);
void display(int arr[],int size);
void radix_sort(int arr[],int size);
int main()
{
printf("------------------------------------------------------\n");
printf(" Hey! This is a radix sort algorithm!\n");
printf("------------------------------------------------------\n\n");
int array[] = {10, 2, 303, 4021, 293, 1, 0, 429, 480, 92, 2999, 14};
int size = sizeof(array)/sizeof(int);
int largest_num = find_the_largest(array,size);
printf("The unsorted array:");
display(array,size);
printf("The radix sort algorithm:\n\n");
radix_sort(array,size);
display(array,size);
return 0;
}
int find_the_largest(int arr[],int size){
int i,max_num=0;
for(i=0;i<size;i++){
if(arr[i]>max_num)
max_num = arr[i];
}
return max_num;
}
void display(int arr[],int size){
int i;
for(i=0;i<size;i++){
printf(" %d",arr[i]);
if(i==size-1)
printf("\n\n");
}
}
void radix_sort(int arr[],int size){
int semi_sort[12];
int max_num = find_the_largest(arr,size);
int i,significant_num = 1;
while(max_num/significant_num>0){
int bucket[bucket_size] = {0};
for(i=0;i<size;i++){
bucket[(arr[i]/significant_num)%10]++;
}
for(i=1;i<size;i++){
bucket[i] += bucket[i-1];
}
for(i=size-1;i>=0;i--){
semi_sort[--bucket[(arr[i]/significant_num)%10]] = arr[i];
}
for(i=0;i<size;i++)
arr[i] = semi_sort[i];
significant_num *= 10;
}
}
C로 프로그래밍하는 경우 C++ 태그를 추가해야하는 이유는 무엇입니까? 관련없는 태그를 추가하지 마십시오. –
'main()'에서'largest_num'에 할당하지만 절대로 사용하지 않습니다. 기수 정렬 코드가 함수를 호출하게하십시오. –