2012-01-17 4 views
2

이것은 오름차순 또는 내림차순으로 함수 포인터를 사용하는 간단한 버블 정렬입니다. 오름차순/내림차순 함수의 return 문이 스왑에 어떻게 영향을 미치는지 이해할 수 없습니다.함수에 대한 포인터가 어떻게 정렬에 영향을 줍니까?

어쩌면 오름차순의 반환 문을 잘못 읽었습니까? 그것이 a보다 작 으면 b를 반환합니까? 또는 진술이 사실 일 경우 0 또는 1을 반환한다는 의미입니까? 약간의 설명을 사용할 수 있습니다. 감사.

void bubble(int work[], const int size, int (*compare)(int a, int b)){ 
    int pass; /* pass counter */ 
    int count; 

    void swap(int *element1Ptr, int *element2Ptr); 

    for (pass = 1 pass < size; pass++){ 

    /* loop to control number of comparison per pass */ 
     if ((*compare)(work[count], work[count+1])){ 
     swap(&work[count], &work[count + 1]); 
    } 
    } 

} 

void swap (int *element1Ptr, int *element2Ptr){ 
    int hold; 
    hold = *element1Ptr; 
    *element1Ptr = *element2Ptr; 
    *element2Ptr = hold; 
} 

/* determine whether elements are out of order for an ascending order sort */ 
int ascending(int a, int b){ 
    return b < a; 
    } 

int descending(int a, int b){ 
    return b > a 
} 

답변

2

return 진술 문에 C은 가능한 경우 함수의 반환 형식으로 캐스트 된 식을 반환합니다. 이 경우 b < aa < b은 부울 식이며 1 또는 0을 반환합니다.

if (b < a) { 
    return 1; 
} 
else { 
    return 0; 
} 
: 다른 측면에서

, 그것은 본질적으로 다음 있지만 (b < a 위해) 더 간결한 수단

0
return b < a; 

의미 : 즉 함수 대수식 b < a의 값을 반환하고, 그렇지 않은 경우 1b < a0를 반환한다.

관련 문제