#include "include/lsort.h" #include "include/types.h" #include "include/quicksort.h" #include typedef int (*int_function_pointer)(int, int); static int default_compare_function(int a, int b) { return a - b; } static int partition(lsort_array_i* array, int L, int R, int_function_pointer compare_function) { int pivot = array->items[R]; int i = L - 1; for (int j = L; j < R; j++) { if (compare_function(array->items[j], pivot) < 0) { i = i + 1; lsort_array_i_swap(array, i, j); } } lsort_array_i_swap(array, i + 1, R); return i + 1; } static void _quicksort(lsort_array_i* array, int L, int R, int_function_pointer compare_function) { if (L < R) { int pivotIndex = partition(array, L, R, compare_function); _quicksort(array, L, pivotIndex - 1, compare_function); _quicksort(array, pivotIndex + 1, R, compare_function); } } int lsort_quicksort(lsort_array_i* array, int_function_pointer compare_function) { if (array->count < 1) { return 0; } if (compare_function == NULL) compare_function = default_compare_function; _quicksort(array, 0, (int)array->count - 1, compare_function); return check_sorted(array) ? 1 : 0; }