2012-01-17 54 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

A returnC中的語句返回給定的表達式,轉換爲函數的返回類型(如果可能)。在這些情況下,b < aa < b是布爾表達式,它返回10

在其它方面,它基本上是指以下,但更簡潔(對於b < a):

if (b < a) { 
    return 1; 
} 
else { 
    return 0; 
} 
0
return b < a; 

意味着:返回1b < a0否則,即,函數返回布爾表達式b < a的值。