3
0
mirror of https://github.com/triqs/dft_tools synced 2024-11-09 07:33:47 +01:00
dft_tools/c/plovasp/atm/argsort.c
2015-11-27 10:52:07 +01:00

48 lines
716 B
C

#include <stdlib.h>
int cmp(const void *a, const void *b)
{
return (**(const double **)a) < (**(const double **)b) ? -1 : 1;
}
int icmp(const void *a, const void *b)
{
return (**(const int **)a) - (**(const int **)b);
}
void argsort(double *arr, int *inds, double **ptrs, const int n)
{
int i;
for (i=0; i < n; i++)
{
ptrs[i] = arr + i;
}
qsort(ptrs, n, sizeof(double *), cmp);
for (i=0; i < n; i++)
{
inds[i] = (int)(ptrs[i] - arr);
}
}
void iargsort(int *iarr, int *inds, int **ptrs, const int n)
{
int i;
for (i=0; i < n; i++)
{
ptrs[i] = iarr + i;
}
qsort(ptrs, n, sizeof(int *), icmp);
for (i=0; i < n; i++)
{
inds[i] = (int)(ptrs[i] - iarr);
}
}