我在计算排序时遇到了一些问题。我试图重新分配一些指针,但这不起作用。我知道我可以使用循环来复制来自" sorted_arr"的排序值。进入我的价值观#34;数组,但我想了解为什么我的版本不起作用。提前谢谢!
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 :(得分:0)
values
是一个指向调用函数发送的数组的指针。因此,更改values
的值不会更改调用函数中的实际数组。这导致调用函数中的实际数组不会改变的问题
要将更改应用于原始数组,请将指针指针作为参数int **
,并在调用函数中更改指针的值,或修改values
数组本身。