Re: [Flashcoders] sort 2d array

2007-02-02 Thread Martin Wood-Mitrovski
I think its wise to be careful how you approach this as although quicksort is 
'quick' you could actually be using it inefficiently (or rather in a situation 
that isnt appropriate)


If your list is almost sorted then quicksort can be inefficient, (depending on 
how you choose your pivot, apparently choosing a random pivot can be a good idea)


Also this highlights how you should be careful when benchmarking any sorting 
algorithms as the order of the data before the sort greatly affects performance.


If its possible you might be better off storing your data already sorted.

How is the data generated?

If you have to sort then you might want to do some reading first :

http://www.cs.sunysb.edu/~algorith/lectures-good/node5.html

'the worst case time for Quicksort is worse than Heapsort or Mergesort.'

http://linux.wku.edu/~lamonml/algor/sort/quick.html

'the quick sort has horrible efficiency when operating on lists that are mostly 
sorted in either forward or reverse order - avoid it in those situations'


youre lucky though because this topic is very well covered :)


Martin
___
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com


Re: [Flashcoders] sort 2d array

2007-02-01 Thread Thomas Fowler

Sorry, had a 1 instead of SortIndex in there earlier

/**
* @param myArray, sortIndex, left, right
*
* @usage where myArray is the 2d array you want to sort, sortIndex is
*the index of the second array on which you wish to sort,
*left is the lower bound of myArray and right is the upper
*bound of myArray
*
*/
function quickSort(myArray : Array, sortIndex : Number, left : Number, 
right : Number) : Array

{
   var arrayLen : Number= myArray.length;
   var lHold: Number= left;
   var rHold: Number= right;
   var pivot: Number= myArray[left][sortIndex];

   while(left < right)
   {
   while( (myArray[right][sortIndex] >= pivot) && (left < right) )
   right--;

   if(left != right)
   {
   myArray[left][sortIndex] = myArray[right][sortIndex];
   left++;
   }

   while( (myArray[left][sortIndex] <= pivot) && (left < right)
   left++;

   if(left != right)
   {
   myArray[right][sortIndex] = myArray[left][sortIndex];
   right--;
   }

   }

   myArray[left][sortIndex]= pivot;
   pivot   = left;
   left= lHold;
   right   = rHold;

   if( left < pivot)
   {
   qSort(myArray, sortIndex, left, pivot - 1);
   }

   if( right > pivot)
   {
   qSort(myArray, sortIndex, pivot + 1, right);
   }

   return myArray;
}

- Original Message -
From: "Thomas Fowler" <[EMAIL PROTECTED]>
To: "Flashcoders mailing list" 
Sent: Thursday, February 01, 2007 12:35 PM
Subject: Re: [Flashcoders] sort 2d array


/**
* @param myArray, sortIndex, left, right
*
* @usage where myArray is the 2d array you want to sort, sortIndex is
*the index of the second array on which you wish to sort,
*left is the lower bound of myArray and right is the upper
*bound of myArray
*
*/
function quickSort(myArray : Array, sortIndex : Number, left : Number, 
right : Number) : Array

{
   var arrayLen : Number= myArray.length;
   var lHold: Number= left;
   var rHold: Number= right;
   var pivot: Number= myArray[left][sortIndex];

   while(left < right)
   {
   while( (myArray[right][sortIndex] >= pivot) && (left < right) )
   right--;

   if(left != right)
   {
   myArray[left][sortIndex] = myArray[right][sortIndex];
   left++;
   }

   while( (myArray[left][sortIndex] <= pivot) && (left < right)
   left++;

   if(left != right)
   {
   myArray[right][sortIndex] = myArray[left][sortIndex];
   right--;
   }

   }

   myArray[left][sortIndex]= pivot;
   pivot   = left;
   left= lHold;
   right   = rHold;

   if( left < pivot)
   {
   qSort(myArray, sortIndex, left, pivot - 1);
   }

   if( right > pivot)
   {
   qSort(myArray, sortIndex, pivot + 1, right);
   }

   return myArray;
}

- Original Message -
From: <[EMAIL PROTECTED]>
To: 
Sent: Thursday, February 01, 2007 11:08 AM
Subject: [Flashcoders] sort 2d array




Hello,

Can anybody tell me how to sort the following array based upon the second
value
within each array item

myArray:Array = [ [20,40],[20,10],[30,15],[30,35],[40,100],[1000,1]];

this should be something like

[[1000,1], [20,10], .

Faster the better cos its for a game and gets called a lot of times.


regards

___
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com


___
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com


___
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com


RE: [Flashcoders] sort 2d array

2007-02-01 Thread neo binedell
Consider:

myArray.sortOn( "1", Array.NUMERIC );

>From a quick test this is 2-3 times faster than the callback "compare" way.

10K entries sorted in:

sortOn(1) :  5ms
sort(compare) : 13ms
 
This works because array indices are considered as keys just like normal
objects.

cheers
~neo

-Original Message-
From: eka [mailto:[EMAIL PROTECTED] 
Sent: 01 February 2007 07:25 PM
To: Flashcoders mailing list
Subject: Re: [Flashcoders] sort 2d array

Hello :)

you must creates benchs to test all solutions but the first is the sort()
method with a custom method

var myArray:Array = [
[20,40],
[20,10],
[30,15],
[30,35],
[40,100],
[1000,1]
];

var compare:Function = function ( a , b ) {

  if ( a[1] < b[1] )
  {
return -1 ;
  }
  else if (a[1] > b[1] )
  {
return 1 ;
  }
  else
  {
   return 0 ;
  }
}

trace(myArray) ;

myArray.sort( compare ) ;

trace(myArray) ;

I think the Actionscript in FP8 or FP9 really speed !

EKA+ :)

2007/2/1, [EMAIL PROTECTED] <[EMAIL PROTECTED]>:
>
>
>
> Hello,
>
> Can anybody tell me how to sort the following array based upon the 
> second value within each array item
>
> myArray:Array = [ [20,40],[20,10],[30,15],[30,35],[40,100],[1000,1]];
>
> this should be something like
>
> [[1000,1], [20,10], .
>
> Faster the better cos its for a game and gets called a lot of times.
>
>
> regards
>
> ___
> [email protected]
> To change your subscription options or search the archive:
> http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
>
> Brought to you by Fig Leaf Software
> Premier Authorized Adobe Consulting and Training 
> http://www.figleaf.com http://training.figleaf.com
>
___
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training http://www.figleaf.com
http://training.figleaf.com

___
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com


Re: [Flashcoders] sort 2d array

2007-02-01 Thread Joshua Sera
Just as a fun thing to do on the side, I'd try
researching priority queues, which were designed for
exactly this sort of problem.

They get used a lot in pathfinding algorithms for
games, which probably makes them doubly relevant.

--- [EMAIL PROTECTED] wrote:

> 
> 
> Hello,
> 
> Can anybody tell me how to sort the following array
> based upon the second
> value
> within each array item
> 
> myArray:Array = [
> [20,40],[20,10],[30,15],[30,35],[40,100],[1000,1]];
> 
> this should be something like
> 
> [[1000,1], [20,10], .
> 
> Faster the better cos its for a game and gets called
> a lot of times.
> 
> 
> regards
> 
> ___
> [email protected]
> To change your subscription options or search the
> archive:
>
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
> 
> Brought to you by Fig Leaf Software
> Premier Authorized Adobe Consulting and Training
> http://www.figleaf.com
> http://training.figleaf.com
> 



 

Don't pick lemons.
See all the new 2007 cars at Yahoo! Autos.
http://autos.yahoo.com/new_cars.html 
___
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com


Re: [Flashcoders] sort 2d array

2007-02-01 Thread Thomas Fowler

/**
* @param myArray, sortIndex, left, right
*
* @usage where myArray is the 2d array you want to sort, sortIndex is
*the index of the second array on which you wish to sort,
*left is the lower bound of myArray and right is the upper
*bound of myArray
*
*/
function quickSort(myArray : Array, sortIndex : Number, left : Number, right 
: Number) : Array

{
   var arrayLen : Number= myArray.length;
   var lHold: Number= left;
   var rHold: Number= right;
   var pivot: Number= myArray[left][sortIndex];

   while(left < right)
   {
   while( (myArray[right][1] >= pivot) && (left < right) )
   right--;

   if(left != right)
   {
   myArray[left][sortIndex] = myArray[right][sortIndex];
   left++;
   }

   while( (myArray[left][sortIndex] <= pivot) && (left < right)
   left++;

   if(left != right)
   {
   myArray[right][sortIndex] = myArray[left][sortIndex];
   right--;
   }

   }

   myArray[left][sortIndex]= pivot;
   pivot   = left;
   left= lHold;
   right   = rHold;

   if( left < pivot)
   {
   qSort(myArray, sortIndex, left, pivot - 1);
   }

   if( right > pivot)
   {
   qSort(myArray, sortIndex, pivot + 1, right);
   }

   return myArray;
}

- Original Message -
From: <[EMAIL PROTECTED]>
To: 
Sent: Thursday, February 01, 2007 11:08 AM
Subject: [Flashcoders] sort 2d array




Hello,

Can anybody tell me how to sort the following array based upon the second
value
within each array item

myArray:Array = [ [20,40],[20,10],[30,15],[30,35],[40,100],[1000,1]];

this should be something like

[[1000,1], [20,10], .

Faster the better cos its for a game and gets called a lot of times.


regards

___
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com


___
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com


Re: [Flashcoders] sort 2d array

2007-02-01 Thread eka

Hello :)

you must creates benchs to test all solutions but the first is the sort()
method with a custom method

var myArray:Array = [
   [20,40],
   [20,10],
   [30,15],
   [30,35],
   [40,100],
   [1000,1]
];

var compare:Function = function ( a , b )
{

 if ( a[1] < b[1] )
 {
   return -1 ;
 }
 else if (a[1] > b[1] )
 {
   return 1 ;
 }
 else
 {
  return 0 ;
 }
}

trace(myArray) ;

myArray.sort( compare ) ;

trace(myArray) ;

I think the Actionscript in FP8 or FP9 really speed !

EKA+ :)

2007/2/1, [EMAIL PROTECTED] <[EMAIL PROTECTED]>:




Hello,

Can anybody tell me how to sort the following array based upon the second
value
within each array item

myArray:Array = [ [20,40],[20,10],[30,15],[30,35],[40,100],[1000,1]];

this should be something like

[[1000,1], [20,10], .

Faster the better cos its for a game and gets called a lot of times.


regards

___
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com


___
[email protected]
To change your subscription options or search the archive:
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Brought to you by Fig Leaf Software
Premier Authorized Adobe Consulting and Training
http://www.figleaf.com
http://training.figleaf.com