-
December 14th, 2008, 04:58 PM
#1
Quick Sort Structs
Hey i am new to c plus plus, and really need some help!
Basically i have information, in a file, first name, second name and idnumber stored in a struct for a number of people as such:
struct person {
char idnumber [numbersize];
char firstname [namesize];
char secondname [namesize];
};
And i need to be able to sort it according to either first name, second name or in ascending idnumber using a quick sort. Is it possible to write a general function and use pointers to assign the relevant piece of information to sort by e.g first name etc?. Then, is it possible to call the function and print the sorted list?
If someone could show me how to do this or offer some helpful code or some hints it would be greatly appreciated.
Thanks.
-
December 14th, 2008, 05:15 PM
#2
Re: Quick Sort Structs
Originally Posted by jaqueshoratio
Hey i am new to c plus plus, and really need some help!
Basically i have information, in a file, first name, second name and idnumber stored in a struct for a number of people as such:
struct person {
char idnumber [numbersize];
char firstname [namesize];
char secondname [namesize];
};
And i need to be able to sort it according to either first name, second name or in ascending idnumber using a quick sort.
Homework? There is a std::sort in C++ that is used for this purpose.
Is it possible to write a general function and use pointers to assign the relevant piece of information to sort by e.g first name etc?. Then, is it possible to call the function and print the sorted list?
If this is homework, then you can call a general function, and the general function calls a specialized compare function function that compares two elements if they are not in order.
Code:
#include <cstring>
static const int numbersize = 50;
static const int namesize = 50;
struct person {
char idnumber [numbersize];
char firstname [namesize];
char secondname [namesize];
};
typedef bool (*CompareFn)(person*, person*);
bool CompareByName(person* first, person* second)
{
return strcmp(first->firstname, second->firstname) < 0;
}
bool CompareByID( person* first, person* second)
{
// ... you fill this in. return true if first comes
// before second, false otherwise
return true;
}
void QuickSort(person* firstperson, int nPersons, CompareFn fnCompare)
{
//...
person *person1;
person* person2;
//...
// swap part of quicksort
// if fnCompare returns false, then swap these two persons
if ( !fnCompare( person1, person2 ) )
{
// swap them, since they're out of order
}
// rest of the quicksort code
}
int main()
{
person MyPerson[40];
// fill in MyPerson with data
//...
// now call QuickSort to sort by name
QuickSort( MyPerson, 40, CompareByName );
// now call it to sort by ID
QuickSort( MyPerson, 40, CompareByID );
}
You fill in the rest.
Regards,
Paul McKenzie
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|