In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

Insertion Sort

스케줄링 프레임워크에 필요해서 간단히 만들어봤다
Get Adobe Flash player
by codeonwort 18 Apr 2011
/**
 * 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 }
        }
        
    }
    
}