나는 C에서 quicksorting 알고리즘을 쓰고있어 내 터미널에 bus error:10
계속 받고있어. 이 특정 경우에 어떻게 확신 할 지 모르지만 배열에 메모리를 할당해야한다는 것을 이해합니다.C 버스 오류 : 10 문자열 배열을 사용하여
편집 : 나는 더 많은 정보없이 quicksort
, partitioning
및 swap
기능
void swap(char* a, char* b){
int temp = *a;
*a = *b;
*b = temp;
}
int partitioning(char* A, int start, int finish){
char* pivot = &A[start];
while(1){
while(strcmp(&A[start], pivot) < 0){
start++;
}
while(strcmp(&A[finish], pivot) > 0){
printf("Decrementing finish\n");
finish--;
}
if(start >= finish){
return start;
}
swap(&A[start], &A[finish]);
}
return start;
}
void quicksort(char* A, int start, int finish){
if(start < finish){
int p = partitioning(A, start, finish);
quicksort(A, start, p);
quicksort(A, p+1, finish);
}
}
int main()
{
char *A[] ={"Thomas","Carl","Sabrina","Noam","Alex",
"Victoria","Julia","Audrey","Elon","Liam","Rebecca"};
int n = 11;
for (int i = 0; i < 11; i++)
{
printf("%s ", A[i]);
}
quicksort(*A, 0 , n-1);
printf("\n-------\n after sort\n------\n");
for (int i = 0; i < 11; i++)
{
printf("%s ", A[i]);
}
printf("\n");
return 0;
}
'char * A [] = {... 문자열 리터럴의 목록 ...}'은'const'없이 실수로 경고하는 것은 매우 위험합니다. 또한,'quicksort()'를 게시하십시오. –
실제 정렬 기준은 어디에 있습니까? 정렬 알고리즘에 일반 데이터의 임의의 덩어리를 던져서 정렬하는 방법을 알기를 기대할 수는 없습니다. – Lundin
'A'는 각 요소가 널 종료 문자열을 가리키는'char *'배열입니다. 'A '의 원소를 가리키는 문자열을 비교하여'A'를'A '를'A'와 같이'quicksort'에 넘겨주는 것은 의미가 없다고 가정합니다. 'A [0]'이 아니라'A '를 정렬하기를 원하기 때문에'A '를'quicksort'에 전달해야하며, 형식 매개 변수는'char **'유형이어야합니다. –