/********************************
 * Author: theteachr
********************************/

#include <stdio.h>

/* helpers */
static void swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

void print_arr(int* arr, int size) {
	printf("{ ");

	for (int i = 0; i < size; i++)
		printf("%d ", arr[i]);

	printf("}\n");
}

/* sort function with comparator */
void bubble_sort(int* arr, int size, int (*cmp)(int, int)) {
    for (int i = 0; i < size - 1; i++)
        for (int j = 0; j < size - i - 1; j++)
            if (cmp(arr[j], arr[j + 1]))
                swap(arr + j, arr + j + 1);
}

/* comparators */
int is_smaller(int a, int b) {
	return a < b;
}

int is_greater(int a, int b) {
	return a > b;
}

int second_digit(int a, int b) {
	return (a / 10) % 10 > (b / 10) % 10;
}

/* driver */
int main(void) {
	int one[] = {12, 0, 5, 154, 87, 78, 124};
	int size = sizeof(one) / sizeof(int);

	// bubble_sort(one, size, is_smaller);
	// bubble_sort(one, size, is_greater);
	bubble_sort(one, size, second_digit);
	print_arr(one, size);
	
	return 0;
}