gpt4 book ai didi

c - 在 C 中排序后跟踪数组的原始索引

转载 作者:行者123 更新时间:2023-12-04 12:19:46 25 4
gpt4 key购买 nike

我有一个数组,比如说 A[5] ,这 5 个元素是 5,4,1,2,3 .现在我按升序对这些数组进行排序。所以结果数组现在是 1,2,3,4,5 .我用 qsort() stdlib.h 的功能对此进行排序。问题是如何获得原始数组相对于我的新数组的索引。最初我的指数是 0,1,2,3,4对于 5,4,1,2,3 的对应值现在指数已更改为 2,3,4,1,0。如何在 C 中有效地获得这些索引?在此先感谢您(如果可能,请编写代码)

最佳答案

在有限条件下还有如下方法。

#include <stdio.h>

int main(void){
int data[] ={ 5,4,1,2,3 }; //Without duplication, The number of limited range.
int size = sizeof(data)/sizeof(*data);
int keys[size];
int i;

printf("data :\n");
for(i=0;i<size;i++){
printf("%d ",data[i]);
}
for(i=0;i<size;i++){
keys[data[i]-1]=i;
}

printf("\n\ndata\tindex\n");
for(i=0;i<size;i++){
printf("%d\t%d\n", data[keys[i]], keys[i]);
}
return 0;
}
/* result sample
data :
5 4 1 2 3

data index
1 2
2 3
3 4
4 1
5 0
*/

建议如何对索引数组@Kerrek 进行排序。
#include <stdio.h>
#include <stdlib.h>

int *array;

int cmp(const void *a, const void *b){
int ia = *(int *)a;
int ib = *(int *)b;
return array[ia] < array[ib] ? -1 : array[ia] > array[ib];
}

int main(void){
int data[] ={ 5,4,1,2,3 };
int size = sizeof(data)/sizeof(*data);
int index[size];//use malloc to large size array
int i;

for(i=0;i<size;i++){
index[i] = i;
}
array = data;
qsort(index, size, sizeof(*index), cmp);
printf("\n\ndata\tindex\n");
for(i=0;i<size;i++){
printf("%d\t%d\n", data[index[i]], index[i]);
}
return 0;
}

关于c - 在 C 中排序后跟踪数组的原始索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24586499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com