"It was not his fault he was a Third." - Enders Game
« Flash Symbol as a Flex Component || blog || Using JSFL to Verify Flash Art »
November 25, 2009



This is a simple bubble sort for ActionScript and Flex, it has parameters that allow you to customize the comparison attribute as well as reverse the sort.
For information on what a Bubble Sort is, and for a more in depth explanation click here.
To use this code simply drop the class into your project (modify package name to fit your location). It is a static function so it can be called simply by using the following commad BubbleSort.sortArray(array);
BubbleSort.sortArray(arrayToSort);
Example usage:
package
{
import com.geothethird.utils.BubbleSort;
import flash.display.Sprite;
public class Testing extends Sprite
{
public function Testing()
{
var ar:Array=new Array(1,8,2,9,6,3,7);
BubbleSort.sortArray(ar);
trace(ar.toString());
BubbleSort.sortArray(ar,null,true);
trace(ar.toString());
var ar2:Array=new Array();
var obj:Object=new Object;
obj.noobs=3;
ar2.push(obj);
var obj2:Object=new Object;
obj2.noobs=2;
ar2.push(obj2);
var obj3:Object=new Object;
obj3.noobs=10;
ar2.push(obj3);
trace(ar2[0].noobs+" "+ar2[1].noobs+" "+ar2[2].noobs);
BubbleSort.sortArray(ar2,"noobs");
trace(ar2[0].noobs+" "+ar2[1].noobs+" "+ar2[2].noobs);
}
}
}
Source Code:
package com.geothethird.utils
{
import flash.utils.ByteArray;
/**
*
* @author Third
*
* Copyright (c) 2009, The Third
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of the Coder Shack nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL,EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
public final class BubbleSort
{
/**
* Performs BubbleSort on array contents.
*
* <p>An attribute parrameter may be passed in to change
* sort to compare the object attribute rather
* than the data itself. </p>
*
* <p>The final parameter reverse reverses the sort,
* the default is bubble sort smallest to largest.</p>
*
* @param ar
* @param attr
* @param reverse
* @return
*
*/
public static function sortArray(ar:Array, attr:String=null,
reverse:Boolean=false):Array
{
for (var o:int = ar.length - 1; o > 0;o--)
{
for (var i:int = 0; i < o;i++)
{
if(!reverse) {
if(attr!=null) {
if(ar[i][attr] < ar[i + 1][attr])
swap(ar[i], ar[i + 1], ar);
} else {
if(ar[i] < ar[i + 1])
swap(ar[i], ar[i + 1], ar);
}
} else {
if(attr != null) {
if(ar[i][attr] > ar[i + 1][attr])
swap(ar[i], ar[i + 1], ar);
} else {
if(ar[i] > ar[i + 1])
swap(ar[i], ar[i + 1], ar);
}
}
}
}
return ar;
}
/**
* @private Swap items within array.
* @param item1
* @param item2
* @param ar
*
*/
private static function swap(item1:Object, item2:Object, ar:Array):void
{
for (var i:int = 0; i < ar.length; i++)
if(ar[i] == item1)
ar[i] = copyObj(item2);
else if (ar[i] == item2)
ar[i] = copyObj(item1);
}
/**
* @private creates a copy of an object
* @param obj
* @return
*
*/
private static function copyObj(obj:Object):*
{
var copy:ByteArray = new ByteArray();
copy.writeObject(obj);
copy.position = 0;
return(copy.readObject());
}
}
}
Related tags: actionscript, bubblesort, flash, flex