https://phaxis.org/2012/07/12/get-sorted-index-orderting-of-an-array/ https://phoxis.org/2012/07/12/get-sorted-index-orderting-of-an-array/
我在本节下尝试了这里的方法
在 C 中使用 qsort
对数组进行排序并返回索引,将数组 base_arr 更改为 double* 类型。但是,当我将 arr[idx[i]] 打印到屏幕上时,一半的值已更改为 0,并且已排序,就好像它们始终为 0 一样。什么可能导致这种情况发生?
double *BASE_ARR;
int main(int argc, char *argv[]) {
int N = par->N;
int K = par->K;
double *ptr;
ptr = (double *) malloc(N*sizeof(ptr));
int *idx;
idx = (int *) malloc(N*sizeof(idx));
// generate the array to be sorted (ptr), in a separate file
for (int i = 0; i < N; i++) {
idx[i] = i;
}
BASE_ARR = ptr;
// sort
qsort(idx, N, sizeof(idx), idxSort);
for (int i = 0; i < N; i++) {
printf("%f\n",ptr[idx[i]]);
}
for (int i = 0; i < N; i++) {
printf("%d\n",idx[i]);
}
for (int i = 0; i < K; i++) {
idx[i] = -1;
}
return 0;
}
static int idxSort (const void *a, const void *b) {
int aa = *((int *)a), bb = *((int *)b);
if (BASE_ARR[aa] < BASE_ARR[bb]) {
return -1;
}
if (BASE_ARR[aa] == BASE_ARR[bb]) {
printf("what");tack
return 0;
}
if (BASE_ARR[aa] > BASE_ARR[bb]) {
return 1;
}
}
qsort(idx, N, sizeof(idx), idxSort);
应该
qsort(idx, N, sizeof(*idx), idxSort);
idx
是一个指针。qsort
不需要知道指针的大小;它需要知道数组元素的大小。
你的也一样malloc
来电。你需要使用sizeof(*idx)
and sizeof(*ptr)
在他们中。顺便说一句,不要投射结果malloc
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)