Quicksort
Jump to navigation
Jump to search
Definition
INT quicksort ( <VOID POINTER array> , <INT elementsize> , <INT elements> , <INT dataoffset> , <BYTE datasize> , <BYTE datatype> )
Sorts an array by the Quicksort ordering algorithm.
This function is very handy for user defined types for elements in which a sort-variable is present. For simple arrays or arrays in which the first variable is the sort-variable, sort() can be used. For arrays in which the sort-variable is a String, ksort() can be used.
Parameters
VOID POINTER array | - Pointer to the first element of the array to be sorted. |
INT elementsize | - The size of an element in the array in bytes. |
INT elements | - The number of elements in the array. |
INT dataoffset | - The number of bytes the sort-variable in each element is relative to the start of that element. |
BYTE datasize | - The size of the sort-variable in bytes. |
BYTE datatype | - The datatype of the sort-variable. (0:integer, 1:float) |
Returns
INT: true
Example
Program sorting; Type _player String name; int score; End Const maxplayers = 5; Global _player player[maxplayers-1]; Begin // Insert some values player[0].name = "That one bad looking dude"; player[1].name = "Ah pretty lame guy"; player[2].name = "Some cool dude"; player[3].name = "OMG ZOMG guy"; player[4].name = "This person is ok"; player[0].score = 70; player[1].score = 30; player[2].score = 80; player[3].score = 90; player[4].score = 50; // Show array say("-------------------- unsorted"); for(x=0; x<maxplayers; x++) say(player[x].name + " - " + player[x].score); end /* Sort by name ( quicksort() can't be used to sort Strings, as a String in Fenix is a pointer to the actual String, so it would sort the pointer addresses */ // sort() sort(player); // sorts by name because name is the first variable in each element // Show array say("-------------------- name - sort()"); for(x=0; x<maxplayers; x++) say(player[x].name + " - " + player[x].score); end // ksort() ksort(player,player[0].name,maxplayers); // Show array say("-------------------- name - ksort()"); for(x=0; x<maxplayers; x++) say(player[x].name + " - " + player[x].score); end /* Sort by score (sort() cannot be used here, because score is not the first variable) */ // ksort() ksort(player,player[0].score,maxplayers); // Show array say("-------------------- score - ksort()"); for(x=0; x<maxplayers; x++) say(player[x].name + " - " + player[x].score); end // quicksort() quicksort(&player[0],sizeof(_player),maxplayers,sizeof(String),sizeof(int),0); // Show array say("-------------------- score - quicksort()"); for(x=0; x<maxplayers; x++) say(player[x].name + " - " + player[x].score); end // Wait until ESC is pressed Repeat frame; Until(key(_esc)) End
Used in example: say(), sort(), ksort(), quicksort(), type, array, pointer