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);
    }
}
Exemple #2
0
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;
}