2017-06-03 9 views
0

私のソートの実装にはいくつか問題があります。私はいくつかのポインタを再割り当てしようとしていますが、これはうまくいきません。私は "sorted_arr"から "values"配列にソートされた値をコピーするためにループを使うことができますが、なぜ私のバージョンが動作しないのか理解したいと思います。前もって感謝します!別のポインタへのポインタの割り当て(ソートの計算)

void countingsort(unsigned int *values, unsigned long nofelements) { 
    unsigned int *aux_arr; 
    unsigned int *sorted_arr; 
    unsigned int *temp_arr; 
    long i; 

    aux_arr = calloc((MAXSORTVALUE + 1), sizeof(*aux_arr)); 
    assert(aux_arr != NULL); 
    sorted_arr = malloc(nofelements * sizeof(*sorted_arr)); 
    assert(sorted_arr != NULL); 

    for (i = 0; i < nofelements; i++) { 
     aux_arr[values[i]]++; 
    } 

    for (i = 1; i <= MAXSORTVALUE; i++) { 
     aux_arr[i] = aux_arr[i] + aux_arr[i - 1]; 
    } 

    for (i = nofelements - 1; i >= 0; i--) { 
     sorted_arr[aux_arr[values[i]] - 1] = values[i]; 
     aux_arr[values[i]]--; 
    } 

    temp_arr = values; // here is the reassignment 

    values = sorted_arr; // and here 

    free(temp_arr); 
    free(aux_arr); 
} 

答えて

0

valuesは、呼び出し元関数によって送信された配列を指すポインタです。したがって、valuesの値を変更しても、呼び出し元関数の実際の配列は変更されません。これは呼び出し元関数の実際の配列が変更されないという問題を引き起こしています。
元の配列に変更を適用するには、ポインターへのポインターをパラメーターint **として受け取り、呼び出し関数内のポインターの値を変更するか、values配列自体を変更します。

+0

ありがとうございました!私は今それを得ると思う – MyLion

関連する問題