Итак, на самом деле мне нужно сохранить индекс старого массива после сортировки. Так, например, если я ввожу [2,4,1,5,7,9,6]
, то вывод будет [2,0,1,3,6,4,5]
. Я уже использовал qsort
, и он работает очень хорошо, если нет повторяющихся элементов.
Если есть повторяющиеся элементы, иногда первый повторяющийся элемент помещался последним. Например, если ввод [5,4,6,5,2,1,3]
, я хочу вывести [5,4,6,1,0,3,2]
. Итак, 5
с индексом 0
ставится перед 5
с индексом 3
. Но при использовании qsort
иногда получается [5,4,6,1,3,0,2]
.
Можете ли вы помочь мне исправить это? Или я должен создать свою собственную функцию сортировки? Не могли бы вы помочь мне создать его?
Вот мой код:
#include <stdlib.h>
int* sortidx(double *X,int n)
{
int *idx,i,j;
int cmp(const void *a,const void *b)
{
return X[*(int*)a]>=X[*(int*)b]?1:-1;
}
idx=(int*)calloc(n,sizeof(int));
for(i=0;i<n;i++)
{
idx[i]=i;
}
qsort(idx,n,sizeof(int),cmp);
return idx;
}