13 bool ascending(int a
, int b
) {
17 bool descending(int a
, int b
) {
21 bool ascending_and_even(int a
, int b
) {
22 return (((a
% 2 != 0) && (b
% 2 == 0)) || ((a
% 2 == 0) && (b
% 2 == 0) && ascending(a
, b
)) \
23 || ((a
% 2 != 0) && (b
% 2 != 0) && ascending(a
, b
)));
26 bool ascending_and_odd(int a
, int b
) {
27 return (((a
% 2 == 0) && (b
% 2 != 0)) || ((a
% 2 == 0) && (b
% 2 == 0) && ascending(a
, b
)) \
28 || ((a
% 2 != 0) && (b
% 2 != 0) && ascending(a
, b
)));
31 static bool sort_first(int* array
, unsigned length
, s_criteria_cb sort_criteria
) {
33 for (unsigned i
= 0; i
< length
-1; i
++) {
34 if (sort_criteria(array
[i
], array
[i
+1])) {
35 swap_int(&array
[i
], &array
[i
+1]);
42 /* the feature of this function is awaited in the array.c file */
43 void sort_bubble_array(int* array
, unsigned length
, s_criteria_cb sort_criteria
) {
46 rt
= sort_first(array
, length
, sort_criteria
);