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); } }
void quicksort(RecordList L,int low,int high){ if(low < high){ pos = quicksort(L,low,high); __quicksort(L,low,pos-1); __quicksort(L,pos+1,high); } }
int quicksort(void *array, int dim, int pivot) { int *indexes, i, diff; indexes = (int*)malloc(dim*sizeof(int)); if (indexes == NULL) return -ENOMEM; diff = dim - pivot; for (i = 0 ; i < dim ; i++) { if (i < pivot) indexes[i] = diff + i; else indexes[i] = i - pivot; } #ifdef __DEBUG_QS__ printf("Sort an array of %d items from pivot %d containing:\n", dim, pivot); dump_char_array((char**)array, dim); printf("Unsorted indexes: "); dump_int_array(indexes, dim); #endif __quicksort(array, indexes, 0, dim-1); #ifdef __DEBUG_QS__ printf("Sorted into:\n"); dump_char_array((char**)array, dim); printf("Sorted indexes: "); dump_int_array(indexes, dim); #endif free(indexes); return 0; }