Solved

problem in using qsort

Posted on 2001-06-12
4
157 Views
Last Modified: 2010-04-02
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?

0
Comment
Question by:godman_polly
4 Comments
 
LVL 2

Accepted Solution

by:
GloriousRain earned 50 total points
ID: 6184517
try leave compare function alone, not in CGetAvgTopInfoGain class, godman_polly.
0
 
LVL 14

Expert Comment

by:AlexVirochovsky
ID: 6184523
   if (&x<&y) (and same) -> error!
must be
   if (*x < *y)
0
 

Author Comment

by:godman_polly
ID: 6184565
It seems that the problem is not as you suggest.
0
 
LVL 9

Expert Comment

by:jasonclarke
ID: 6185426
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

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

When writing generic code, using template meta-programming techniques, it is sometimes useful to know if a type is convertible to another type. A good example of when this might be is if you are writing diagnostic instrumentation for code to generat…
Introduction This article is the first in a series of articles about the C/C++ Visual Studio Express debugger.  It provides a quick start guide in using the debugger. Part 2 focuses on additional topics in breakpoints.  Lastly, Part 3 focuses on th…
The viewer will learn how to use the return statement in functions in C++. The video will also teach the user how to pass data to a function and have the function return data back for further processing.
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

920 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now