shawind 发表于 2009-4-5 23:03:09

[as3]冒个泡


package
{
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.system.Capabilities;

    public class test extends Sprite
    {
      private var board:TextField = new TextField();
      
      public function test()
      {
            board.width = Capabilities.screenResolutionX;
            board.height = Capabilities.screenResolutionY;
            board.multiline = true;
            board.wordWrap = true;
            addChild(board);
            
            var a:Array = createArray(16);
            a = 100;
            show(a);
            sort(a);
            show(a);
            
            var c:int = search(a, 100);
            
            if (c != -1 && c >= 0)
                show("100的位置在:" + String(c+1));
            else
                show("数组中没找到100");
            
      }
      
      private function createArray(c:int):Array
      {
            var a:Array = new Array(c);
            for (var i:int = 0; i < c; i++)
            {
                a = int(Math.random()*1000);
            }
            return a;
      }
      
      
      private function sort(a:Array):void
      {   
            for (var i:int = (a.length - 1); i > 0; i--)
            {
                for (var j:int = 0; j < i; j++)
                {
                  if (a > a)
                  {
                        var t:int = a;
                        a = a;
                        a = t;
                  }
                }
            }
      }

      private function search(a:Array, v:int):int
      {
            var l:int = 0;
            var h:int = a.length - 1;
            var m:int;
            
            while (l <= h)
            {
                m = (l + h) >>> 1;
               
                if(a < v)
                  l = m + 1;
                else if(a > v)
                  h = m - 1;
                else
                  return m;
            }
            
            return -1;
      }
      
      private function find(a:Array):Object
      {
            var obj:Object;
            return obj;
      }
      
      private function show(o:Object):void
      {
            this.board.appendText(String(o) + "\n");
      }
    }
   
}

rednaxela 发表于 2009-4-6 01:43:07

果然是冒泡么 =v=
话说容器里都是同一个类型的话,干脆用泛型吧~
在FlashPlayer 10上的ActionScript 3可以用Vector.<int>这样来声明一个类似数组的泛型容器,效率也比一般数组高。

shawind 发表于 2009-4-6 13:00:21

Vector就是内存中连续分布的数组吧。不是和Array差不多么?
我看的是flash as programming,里面没说泛型。
但在别人的库里,我看到有用*不确定类型来写的,这个东西可以当泛型用么?

rednaxela 发表于 2009-4-7 11:52:14

Array可以用作稀疏数组或者密集数组,为了应对稀疏的用法,Array在AS3里的效率会稍微低一些。而Vector.<T>总是密集的,外加有机会减少类型检查,运行效率能高一些。

你看的资料要够新才行。Vector.<T>是在FlashPlayer 10开始才加入的,老的书上自然是没有。

*跟泛型完全不是一回事。*是“任意类型”,不做任何类型限制,也没有编译时类型检查;泛型参数在编译时是会检查的。ActionScript 3有严格模式和普通模式,前者要求声明类型,所以需要用*;其实用*跟后者不写类型标记达到的效果是一样的……

shawind 发表于 2009-4-7 13:55:16

原来是这样,看来还是得去看e文的文档,中文的都比较滞后.
页: [1]
查看完整版本: [as3]冒个泡