/**
* Copyright codeonwort ( http://wonderfl.net/user/codeonwort )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/4f4u
*/
package {
// 스케줄링 프레임워크에 필요해서 간단히 만들어봤다
import flash.display.Sprite;
[SWF(width=400, height=400, frameRate=2, backgroundColor=0xffffff)]
public class InsertionSort extends Sprite {
private var array:Array = []
public function InsertionSort() {
// write as3 code here..
for(var i:int = 0 ; i < 20 ; i++){
isort(array, int(Math.random()*400))
}
for(i = 0 ; i < array.length ; i++){
graphics.beginFill(0xffffff*i/array.length, 1)
graphics.drawRect(0, i*20, array[i], 20)
graphics.endFill()
}
}
// 오름차순 (작은 원소가 앞에 있다)
// comparer는 두 원소 a, b를 받아서 a가 b의 왼쪽에 와야 하면 true, 오른쪽에 와야 하면 false를 반환한다
// 배열은 이미 동일한 비교 방법을 통해 정렬된 상태여야 한다
private static function isort(ary:Array, item:*, comparer:Function=null):void {
comparer ||= defaultComparer
for(var i:int = 0 ; i<ary.length ; i++){
if(comparer(ary[i], item)){
ary.splice(i, 0, item)
return
}
}
ary.push(item)
// a > b : 작은 게 왼쪽에 옴 (같으면 원래 있던 원소가 왼쪽에)
// a >= b : 작은 게 왼쪽에 옴 (같으면 새 원소가 왼쪽에)
function defaultComparer(a:*, b:*):Boolean { return a > b }
}
}
}