third

"It was not his fault he was a Third." - Enders Game
 blog | photos | videos | search | links

Flex ActionScript Bubble Sort

 ||  blog  || 

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());
		}
	}
}

Download BubbleSort.as

Related tags: actionscript, bubblesort, flash, flex

Leave a comment

captcha