forked from: [betweenAS3]BubbleSort And SelectionSort
forked from [betweenAS3]BubbleSort And SelectionSort (diff: 174)
fork?なにそれ?おいしいの? ごめん俺もうまくできない・・・
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);
}
}
}
}
}
}
