suivi des indices d’origine d’un tableau après le sorting en C

J’ai un tableau, disons A[5] , les 5 éléments sont 5,4,1,2,3 . Maintenant, je sortinge ces tableaux en ordre croissant. le tableau résultant sera donc 1,2,3,4,5 . J’utilise la fonction qsort() de stdlib.h pour sortinger cela. La question est de savoir comment puis-je obtenir les indices du tableau d’origine par rapport à mon nouveau tableau. mes indices étaient à l’origine 0,1,2,3,4 pour les valeurs correspondantes de 5,4,1,2,3 et maintenant les indices ont changé à 2,3,4,1,0. Comment puis-je obtenir ces indices efficacement en C? Merci d’avance (veuillez écrire le code si possible)

Il existe également une méthode comme suit dans des conditions limitées.

 #include  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 

Comment sortinger un tableau d’index @Kerrek est comme proposé.

 #include  #include  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 

Prenons un tableau 2D. Stocker les nombres est la première colonne, puis les index correspondants dans la deuxième colonne. Vous pouvez écrire votre fonction de comparaison en tant que:

 int compare ( const void *pa, const void *pb ) { const int *a = pa; const int *b = pb; if(a[0] == b[0]) return a[1] - b[1]; else return a[0] - b[0]; } 

L’appel à qsort devrait être:

 qsort(array, n, sizeof array[0], compare); // n is representing rows 

Voir la démo en direct