코드 모든
먼저 고정, 코드와 꽤 심각한 근본적인 문제가 있습니다. 우리가 그것들을 다루기 전에, 지금까지 가지고있는 것을 고쳐 둡시다. 정렬 루프는 배열을 절반으로 정렬하고 b 배열을 절반으로 정렬하는 것처럼 보였습니다. 당신은 또한 b 배열을 어떤 값을 포함하도록 초기화하지 않았습니다. 여기에 코드의 수정 된 버전은 다음
#define CLASS_SIZE 10
#include <stdio.h>
void bubbleSortAWriteToB(const char a[], char * b[]);
int main(void){
int i;
// initialize array
char * s_letters[CLASS_SIZE];
char letters[CLASS_SIZE] = {'a','r','p','b','r','c','x','e','w','j'};
// sort array
bubbleSortAWriteToB(letters,s_letters);
// print sorted array
for (i=0;i<CLASS_SIZE;i++){
printf("%c\n", *s_letters[i]);
}
return 0;
}
void bubbleSortAWriteToB(const char a[], char * b[]){
char * temp;
int i,j;
// initialize b array to hold pointers to each element in a
for (i=0;i<CLASS_SIZE;i++){
b[i] = (char *)(a) + i;
}
// in-place sort the b array
for(i=0;i<CLASS_SIZE;i++){
for(j=i+1;j<CLASS_SIZE-1;j++){
if(*b[j-1]>*b[j]){
temp = b[j];
b[j] = b[j-1];
b[j-1] = temp;
}
}
}
}
수정이 포인트와 B 어레이를 초기화하고 A 배열에 대응하는 값을 비교하여 현재 위치에서 상기 B 배열을 정렬하는 것이다. 원래 코드에서 코드
을 단순화
는
, 전략 (b)는 다음의 요소를 가리킨 것이라고이 정리 될 포인터의 배열을 가지고 있었다. 문자가 포인터보다 작기 때문에 여기서는 불필요합니다. 따라서 b를 문자 배열로 지정하면 더 공간 효율적이고 간단합니다.
또한 간격이 너무 좁아서 읽기가 다소 어려웠습니다. 다음은 포인터 대신 문자 배열로 b를 사용하고 간격을 개선 한 솔루션입니다. 또한 위의 함수를 선언 할 필요가 없습니다. 함수를 정의하고 한번 선언하면 충분합니다.
#define CLASS_SIZE 10
#include <stdio.h>
void bubbleSortAWriteToB(const char a[], char b[]){
char temp;
int i,j;
// initialize b array to hold pointers to each element in a
for (i = 0; i < CLASS_SIZE; i++){
b[i] = a[i];
}
// in-place sort the b array
for(i = 0; i < CLASS_SIZE; i++){
for(j = i + 1; j < CLASS_SIZE - 1; j++){
if(b[j-1] > b[j]){
temp = b[j];
b[j] = b[j-1];
b[j-1] = temp;
}
}
}
}
int main(void){
int i;
// initialize array
char s_letters[CLASS_SIZE];
char letters[CLASS_SIZE] = {'a','r','p','b','r','c','x','e','w','j'};
// sort array
bubbleSortAWriteToB(letters, s_letters);
// print sorted array
int i;
for (i = 0; i < CLASS_SIZE; i++){
printf("%c\n", s_letters[i]);
}
return 0;
}
출처
2012-03-21 17:58:47
Cam
가 (HTTP [이 세그먼트의 잘못] 입력 : //codepad.org/7BwJOikP). –
그게 무슨 뜻입니까? – Umut
그럴 필요가없는 메모리에 액세스하려는 것입니다. –