2017-06-03 117 views
0

我在计算排序的实现时遇到了一些问题。我正在尝试重新分配一些指针,但是这不起作用。我知道我可以使用循环来将“sorted_arr”中的排序值复制到我的“值”数组中,但我想知道为什么我的版本不起作用。提前致谢!将指针分配给不同的指针(计数排序)

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