Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
Solved

# problem in using qsort

Posted on 2001-06-12
Medium Priority
176 Views
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
Question by:godman_polly
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points

LVL 2

Accepted Solution

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

LVL 14

Expert Comment

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

Author Comment

ID: 6184565
It seems that the problem is not as you suggest.
0

LVL 9

Expert Comment

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

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â€¦
Many modern programming languages support the concept of a property -- a class member that combines characteristics of both a data member and a method.  These are sometimes called "smart fields" because you can add logic that is applied automaticallâ€¦
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor anâ€¦
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.
###### Suggested Courses
Course of the Month8 days, 9 hours left to enroll