Javaみたいなバイナリサーチ

by uwi
やぼったい実装になっております
♥0 | Line 52 | Modified 2010-02-12 14:29:05 | MIT License
play

ActionScript3 source code

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

package {
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.utils.getTimer;
    // やぼったい実装になっております
    public class Test extends Sprite {
        private var _tf : TextField;
  
        public function Test() {
            _tf = new TextField();
            _tf.width = 465;
            _tf.height = 465;
            addChild(_tf);
            
            var s : int = getTimer();
            
            var a : Array = [];
            for(var i : int = 0;i < 100;i++){
            		a.push(Math.random());
            }
            a.sort(Array.NUMERIC);
            tr(binarySearch(a, 0.5));
            tr(binarySearch(a, 0));
            tr(binarySearch(a, a[0]+ 0.00000001));
            tr(binarySearch(a, a[99]- 0.00000001));
            tr(binarySearch(a, 1));
            tr(binarySearch(a, a[95]));
            tr(binarySearch(a, a[0]));
            tr(binarySearch(a, a[99]));
            
            var g : int = getTimer();
            tr((g - s) + " ms");
        }
        
        private function binarySearch(a : Array, v : Number) : int
        {
        		var s : uint = 0;
        		var g : uint = a.length;
        		if(v > a[g-1])return -g-1;
        		if(v < a[0])return -1;
        		if(v == a[0])return 0;
        		do{
	        		var m : uint = (s + g) >> 1;
	        		if(v == a[m])return m;
	        		if(v < a[m]){
	        			g = m;
	        		}else{
	        			s = m;
	        		}
        		}while(g - s > 1);
        		return -s - 2;
        }

        private function tr(...o : Array) : void
        {
            _tf.appendText(o + "\n");
        }
    }
}