- This wiki is out of date, use the continuation of this wiki instead
 
Ksort
From FenixWiki
Contents | 
[edit] Definition
INT ksort ( <VARSPACE array> , <VARSPACE sort-variable> , [<INT datacount>] )
Sorts a certain array according to a sort-variable within the elements and by sorting a certain number of elements. By default the whole array is sorted.
If the array elements contain only one variable each or the first one is the sort-variable, sort() can be used. For more advanced sorting, look at quicksort().
[edit] Parameters
| VARSPACE array | - The array to be sorted. | 
| VARSPACE sort-variable | - The variable within each element to be used for the sorting. | 
| [INT datacount] | - Number of elements to sort. | 
[edit] Returns
INT: Successrate
| true | - Sorting succeeded. | 
| false | - Sorting failed, probably the type of sort-variable isn't supported. | 
[edit] 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
