Jump to content
  • Advertisement


This topic is now archived and is closed to further replies.


Two questions on qsort()...

This topic is 5823 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hello everyone! My both questions relate standard qsort() from stdlib.h: 1. Does qsort() swap elements of given array or it allocates for sorting time another array of same size with elements of type "pointer to that type" and operates only on pointers when swapping? It's logic it would be much faster when you want to sort array of elements of type say int lala[100000] - swapping such elements would be very time consuming..... 2. How to do the following I want to have a class where I can put elements of templated type "Type" and sort them using qsort() passing in pointer to comparing function of same type as that for qsort. However I don't store my elements in "single" array (like int *Something), but in structure that contains additional marker "Used" of type boolean. So I'd like to have a class like this:
template (class Type) - proper brackets not supported here
class Just_Class


	struct Element_t
		Type ID;
		bool Used ;

	Element_t *Elements;
	int Num;

	// Pointer to function comparing ID's of type "Type"
	int (*Cmp)(const void *, const void *);

	// Compares Elements
	static int CmpElements(const void *a, const void *b)
		return (*Cmp)((const Element_t *)a->ID, (const Element-t *)b->ID);


	// Constructors / Destructors...etc...
	// Put / Get element.....bla bla...etc

	// Sorts Elements
	void Sort(int (__cdecl *_Cmp)(const void *, const void *))
		Cmp = _Cmp;
		qsort(Elements, Num, sizeof(Type), CmpElements);

...but unfortunately this doesn't compile because CmpElements is static, so it can't call not static (*Cmp) (if I get it right)... When I don't make it static however there's no casting defined and qsort() says it can't accept 4th argument.... I solved this temporarily by putting this function pointer
int (__cdecl *Cmp)(const void *, const void *);
out of class but it's not elegant, is it? Any suggestions would be very appreciated... Thanks for any help. [edited by - MickeyMouse on October 16, 2002 9:30:47 AM]

Share this post

Link to post
Share on other sites

  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!