void List::qs_sort(int p, int r, sort_t order) { // Implement quicksort algorithm. The list is sorted in place. // Returns: Nothing. #if defined(DEBUG) dlog->log_entry(DEBUG_MINTRC, "List::qs_sort(%d,%d,%d)", p, r, order); #endif // It would probably make sense to use STL's sort or something, but // that would require a fair amount of rewriting. Array.C does // something similar. if(p < r) { int q = qs_partition(p, r, order); qs_sort(p, q, order); qs_sort(q+1, r, order); } #if defined(DEBUG) dlog->log_exit(DEBUG_MINTRC, "List::qs_sort()"); #endif }
void qst(DArray *array, DArray_compare cmp, int low, int hi) { if (low < hi) { int p = qs_partition(array, cmp, low, hi); qst(array, cmp, low, p); qst(array, cmp, p + 1, hi); } }
void __quicksort(void *array, int *indexes, int start, int end) { int pivot; if ( start < end ) { pivot = qs_partition(array, indexes, start, end, start); __quicksort(array, indexes, start, pivot-1); __quicksort(array, indexes, pivot+1, end); } }
static void qs_sort (void* items, int item_size, int l, int r, compare_proc proc, void* user_data) { if (l < r) { int index = qs_partition(items, item_size, l, r, proc, user_data); qs_sort(items, item_size, l, index - 1, proc, user_data); qs_sort(items, item_size, index + 1, r, proc, user_data); } }