forked from: [betweenAS3]BubbleSort And SelectionSort

by aaharu forked from [betweenAS3]BubbleSort And SelectionSort (diff: 174)
fork?なにそれ?おいしいの?
ごめん俺もうまくできない・・・
♥0 | Line 111 | Modified 2010-04-15 23:09:49 | MIT License
play

ActionScript3 source code

/**
 * Copyright aaharu ( http://wonderfl.net/user/aaharu )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/iEKU
 */

// forked from applicott's [betweenAS3]BubbleSort And SelectionSort
/*
fork?なにそれ?おいしいの?
ごめん俺もうまくできない・・・
*/
package {
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageQuality;
	import flash.display.StageScaleMode;
	import flash.events.MouseEvent;
	import frocessing.color.ColorHSV;
	import org.libspark.betweenas3.BetweenAS3;
	import org.libspark.betweenas3.tweens.ITween;
	
	[SWF(backgroundColor=0x000000)]
	public class Sort extends Sprite {
		private const NUM:uint = 45; // 配列の個数
		private var list1:Vector.<Sprite> = new Vector.<Sprite>(NUM);
		private var list2:Vector.<Sprite> = new Vector.<Sprite>(NUM);
		private var count:uint = 0;
		private var array:Array = [];
		private var array2:Array = [];
		
		public function Sort() {
			stage.quality = StageQuality.HIGH;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
			
			for(var i:uint = 0; i < NUM; i++) {
				var hsv:ColorHSV = new ColorHSV(i * 6, 1, 1);
				var sp:Sprite = new Sprite();
				sp.graphics.lineStyle(1, hsv.toRGB().value);
				sp.graphics.lineTo(0, (i + 1) * 3.5);
				sp.name = ((i + 1) * 3).toString();
				sp.x = i * 10 + 10;
				sp.y = 30;
				list1[i] = sp;
				
				var sp2:Sprite = new Sprite();
				sp2.graphics.lineStyle(1, hsv.toRGB().value);
				sp2.graphics.lineTo(0, (i + 1) * 3.5);
				sp2.name = ((i + 1) * 3).toString();
				sp2.x = i * 10 + 10;
				sp2.y = 250;
				list2[i] = sp2;
				
				stage.addChild(list1[i]);
				stage.addChild(list2[i]);
			}
			
			stage.addEventListener(MouseEvent.CLICK, onMouseClick);
		}
		
		private function onMouseClick(e:MouseEvent):void {
			switch(	count++){
				case 0:
					shuffle();
					break;
				case 1:
					selection();
					bubble();
					BetweenAS3.parallelTweens(
						[BetweenAS3.serialTweens(array), BetweenAS3.serialTweens(array2)]
					).play();
					break;
				default:
					break;
			}
		}
		
		private function shuffle():void {
			var i:int = NUM;
			while(--i) {
				var j:int = Math.floor(Math.random() * (i + 1));
				if(i == j) continue;
				var t:Sprite = list1[i];
				list1[i] = list1[j];
				list1[j] = t;
				
				var t2:Sprite = list2[i];
				list2[i] = list2[j];
				list2[j] = t2;
			}
			for(i = 0; i < NUM; i++) {
				list1[i].x = list2[i].x = i * 10 + 10;
			}
		}
		
		private function selection():void {
			var min:uint;
			for(var i:uint = 0; i < NUM - 1; i++) {
				min = i;
				for(var j:uint = i + 1; j < NUM; j++) {
					if(int(list1[j].name) < int(list1[min].name)) {
						min = j;
					}
				}
				if(i != min) {
					var t:Sprite = list1[min];
					list1[min] = list1[i];
					list1[i] = t;
					
					var tween:ITween = BetweenAS3.parallelTweens(
						[BetweenAS3.to(list1[i], {x: i * 10 + 10}), BetweenAS3.to(list1[min], {x: min * 10 + 10})]
					);
					array.push(tween);
				}
			}
		}
		
		private function bubble():void {
			for(var i:uint = 0; i < NUM - 1; i++) {
				for(var j:uint = NUM - 1; j > i; j--){
					if(int(list2[j-1].name) > int(list2[j].name)) {
						var t:Sprite = list2[j];
						list2[j] = list2[j-1];
						list2[j-1] = t;
						
						var tween:ITween = BetweenAS3.parallelTweens(
							[BetweenAS3.to(list2[j-1], {x: (j-1) * 10 + 10}), BetweenAS3.to(list2[j], {x: j * 10 + 10})]
						);
						array2.push(tween);
					}
				}
			}
		}
	}
}