problem in using qsort

Hi,

   I am writing a C++ program with the use of qsort to sort a double array.

   part of the code is as follow:

int CGetAvgTopInfoGain::compare(const void * a, const void * b) {

        double *x, *y;
        x=(double*)a;
        y=(double*)b;

        if (&x<&y)
                return -1;
        else if (&x==&y)
                return 0;
        else if (&x>&y)
                return 1;
}                                      

feature is a double array with size 500;
size is an integer which equals 20;
when I try to call the following method
  qsort (feature_IG, size, SIZE_DOUBLE, compare);

CGetAvgTopInfoGain.cc:74: argument passing to `void *' from `double'
is always resulted. Could you help me to solve this problem?

godman_pollyAsked:
Who is Participating?
 
GloriousRainConnect With a Mentor Commented:
try leave compare function alone, not in CGetAvgTopInfoGain class, godman_polly.
0
 
AlexVirochovskyCommented:
   if (&x<&y) (and same) -> error!
must be
   if (*x < *y)
0
 
godman_pollyAuthor Commented:
It seems that the problem is not as you suggest.
0
 
jasonclarkeCommented:
There is a much better way of sorting stuff than using qsort in modern C++.  You could get rid of your compare function altogether add an include:

#include <algorithm>

and then just call:

std::sort(feature_IG, feature_IG+size);

apart from being far simpler to work with, this will result in *quicker* sorting in most cases.

If you insist on using quicksort, then both above comments appear to be correct.  Your compare function cannot be a member function and you need to use the * operator rather than & to get the actual values of the doubles.


0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.