Thread: Generic Sorting
View Single Post
  #1  
Old 05-22-2007, 04:34 AM
Novo Novo is offline
[TServerDeveloper]
Join Date: Jun 2006
Posts: 448
Novo will become famous soon enough
Generic Sorting

For those who wanted to know what use does variable functions do... Here's an example:

class: math-sort
PHP Code:
function defaultSort( sideA, sideB )
  {
  return (
sideA < sideB);
  }

function 
sortList( list, compFunc )
  {
  
this.sortFunc = ( compFunc == null ? this.defaultSort : compFunc );

  for ( 
temp.i = 0; temp.i < list.size() - 1; temp.i++ )
    {
    
temp.min = temp.i;
    for ( 
temp.j = temp.i + 1; temp.j < list.size(); temp.j ++ )
      {
      if ( 
sortFunc( list[temp.j], list[temp.min]) )
        
temp.min = temp.j;
      }

    
temp.b = list[temp.i];
    list[
temp.i] = list[temp.min];
    list[
temp.min] = temp.b;
    }

  return list;
  } 
PHP Code:
function onCreated()
  {
  
join("math-sort");
  
temp.l = {{1,3},{3,2},{2,1},{4,2} };

  
temp.func = function(sideA, sideB)
    {
    return ( 
sideA[0] < sideB[0] );
    };

  
temp.list = sortList( temp.l, temp.func );
  echo( 
temp.list ); // {{1, 3}, {2, 1}, {3, 2}, {4, 2}}
  
} 
You could have them sorted by this function...

A practical use of this is sorting a list of NPCs with respect to how far it is!
One way to do this is simply defining this function:

PHP Code:
  temp.func = function(sideA, sideB)
    {
    return ( (
sideA.x - this.x)^2 + (sideA.y - this.y)^2 < (sideB.x - this.x)^2 + (sideB.y - this.y)^2 );
    }; 
Reply With Quote