我想按降序进行排序的整数数组,但我想他们的指数保持相同before.For例如:如何使用索引对数组进行排序?
arr[]={5,4,9,3,1,2}
index={0,1,2,3,4,5}
排序后:
arr[]={9,5,4,3,2,1}
index={2,0,1,3,5,4}
如何做到这一点?
我想按降序进行排序的整数数组,但我想他们的指数保持相同before.For例如:如何使用索引对数组进行排序?
arr[]={5,4,9,3,1,2}
index={0,1,2,3,4,5}
排序后:
arr[]={9,5,4,3,2,1}
index={2,0,1,3,5,4}
如何做到这一点?
你需要修改一个标准的排序算法,而不是基于arr [i]进行评估,而是基于arr [index [i]]进行评估,并仅更改index [i]中的值。所有的排序算法最终归结为一个元素与另一个元素的比较,你所拥有的是一个额外的间接程度。
C中的数值食谱是一本很好的在线书籍,您可以从中获得这样的算法或计算机科学文本的任何介绍。
您应该使用带有字段(值,索引)的结构数组,然后根据值字段对其进行排序。因此,索引字段应如前所述保留。
#include <stdio.h>
#include <stdlib.h>
int *Array;
int cmp(const void *a, const void *b){
int ix = *(const int*)a;
int iy = *(const int*)b;
return Array[ix]>Array[iy] ? -1 : Array[ix]<Array[iy];
}
int main(){
int arr[] ={5,4,9,3,1,2};
int index[]={0,1,2,3,4,5};
int i, size = sizeof(index)/sizeof(*index);
int sorted[size];
Array = arr;
qsort(index, size, sizeof(*index), cmp);
for(i=0;i<size;++i)
printf("%d ", sorted[i]=arr[index[i]]);
printf("\n");
for(i=0;i<size;++i)
printf("%d ", index[i]);
printf("\n");
return 0;
}
你已经试过了什么? – AntonH
您可以对(value,old-index)的结构对进行排序。然后,按新顺序提取第二个组件(旧索引)。 – Gassa