#include <stdlib.h>
#include <stdio.h>
static double * myArray;
int compareIndices( const void * v1, const void * v2)
{
long val1 = * ( long * ) v1;
long val2 = * ( long * ) v2;
if ( myArray[ val1] < myArray[ val2] )
return - 1 ;
else
if ( myArray[ val1] > myArray[ val2] )
return 1 ;
return 0 ;
}
long * IndexSort( unsigned long int vectorLength, double * column)
{
myArray = column;
long * index
= malloc ( vectorLength
* sizeof ( long ) ) ; if ( index )
{
unsigned long i;
for ( i = 0 ; i < vectorLength; ++ i)
index[ i] = i;
qsort ( index
, vectorLength
, sizeof ( long ) , compareIndices
) ; return index;
}
return 0 ;
}
int main( )
{
double testData[ ] = { 0.8147 , 0.9058 , 0.127 , 0.9134 , 0.6324 , 0.0975 , 0.2785 ,
0.5469 , 0.9575 , 0.9649 , 0.1576 , 0.9706 , 0.9572 , 0.4854 ,
0.8003 , 0.1419 , 0.4218 , 0.9157 , 0.7922 , 0.9595 } ;
unsigned long numItems = sizeof ( testData) / sizeof ( testData[ 0 ] ) ;
long * indices = IndexSort( numItems, testData) ;
if ( indices )
{
for ( unsigned long i = 0 ; i < numItems; ++ i)
printf ( "%lf has an index of %ld\n " , testData
[ indices
[ i
] ] , indices
[ i
] ) ; }
}
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KCnN0YXRpYyBkb3VibGUgKm15QXJyYXk7CgppbnQgY29tcGFyZUluZGljZXMoY29uc3Qgdm9pZCogdjEsIGNvbnN0IHZvaWQgKnYyKQp7CiAgICBsb25nIHZhbDEgPSAqKGxvbmcgKil2MTsKICAgIGxvbmcgdmFsMiA9ICoobG9uZyAqKXYyOwogICAgaWYgKG15QXJyYXlbdmFsMV0gPCBteUFycmF5W3ZhbDJdKQogICAgICAgIHJldHVybiAtMTsKICAgIGVsc2UKICAgIGlmICggbXlBcnJheVt2YWwxXSA+IG15QXJyYXlbdmFsMl0pCiAgICAgICAgcmV0dXJuIDE7CiAgICByZXR1cm4gMDsKfQoKbG9uZyogSW5kZXhTb3J0KHVuc2lnbmVkIGxvbmcgaW50IHZlY3Rvckxlbmd0aCwgZG91YmxlKiBjb2x1bW4pCnsKICAgIG15QXJyYXkgPSBjb2x1bW47CiAgICBsb25nICppbmRleCA9IG1hbGxvYyh2ZWN0b3JMZW5ndGggKiBzaXplb2YobG9uZykpOwogICAgaWYgKCBpbmRleCApCiAgICB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkKICAgICAgICAgICAgaW5kZXhbaV0gPSBpOwogICAgICAgIHFzb3J0KGluZGV4LCB2ZWN0b3JMZW5ndGgsIHNpemVvZihsb25nKSwgY29tcGFyZUluZGljZXMpOwogICAgICAgIHJldHVybiBpbmRleDsKICAgIH0KICAgIHJldHVybiAwOwp9CgppbnQgbWFpbigpCnsKICAgIGRvdWJsZSB0ZXN0RGF0YVtdID0geyAwLjgxNDcsIDAuOTA1OCwgMC4xMjcsIDAuOTEzNCwgMC42MzI0LCAwLjA5NzUsIDAuMjc4NSwKICAgICAgICAwLjU0NjksIDAuOTU3NSwgMC45NjQ5LCAwLjE1NzYsIDAuOTcwNiwgMC45NTcyLCAwLjQ4NTQsCiAgICAgICAgMC44MDAzLCAwLjE0MTksIDAuNDIxOCwgMC45MTU3LCAwLjc5MjIsIDAuOTU5NSB9OwogICAgdW5zaWduZWQgbG9uZyBudW1JdGVtcyA9IHNpemVvZih0ZXN0RGF0YSkgLyBzaXplb2YodGVzdERhdGFbMF0pOwogICAgbG9uZyAqaW5kaWNlcyA9IEluZGV4U29ydChudW1JdGVtcywgdGVzdERhdGEpOwogICAgaWYgKCBpbmRpY2VzICkKICAgIHsKICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBudW1JdGVtczsgKytpKQogICAgICAgICAgICBwcmludGYoIiVsZiBoYXMgYW4gaW5kZXggb2YgJWxkXG4iLCB0ZXN0RGF0YVtpbmRpY2VzW2ldXSwgaW5kaWNlc1tpXSk7CiAgICAgICAgZnJlZShpbmRpY2VzKTsKICAgIH0KfQ==