2012-01-17 15 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を返します。他の点で

、それは(b < aために)本質的に以下のことを意味するが、より簡潔:

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

手段:すなわち関数は、ブール式b < aの値を返し、そうでなければ1場合b < a0を返します。

関連する問題