AS3高效率随机化数组_效率对比

75 篇文章 0 订阅

本帖最后由 xinyu126 于 2012-9-20 10:35 编辑

看了首页的帖子。
连接:http://bbs.9ria.com/thread-149910-1-1.html

发现帖子内容和我的已知相差很远。不得不写了一个测试,用事实来证明什么是真正高效率随机数组。

不管是as还是别的语言。这种方式都是最高效的。

看代码

 

package
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.utils.getTimer;
        
        public class uilib extends Sprite
        {
                public function uilib()
                {
                        test(null);
                }
                
                private function test(evt:Event):void{
                        var len:int = 100000;
                        var arr:Array = new Array(len);
                        for(var i:int = 0; i<len;i++){
                                arr[i] = i;
                        }
                        
                        var start:int; 
                        var end:int;
                        
                        start = getTimer();
                        arr = func1(arr);
                        end = getTimer();
                        trace('func1=>',end-start);
                        
                        start = getTimer();
                        arr = func2(arr);
                        end = getTimer();
                        trace('func2=>',end-start);
                        
                        start = getTimer();
                        arr = func3(arr);
                        end = getTimer();
                        trace('func3=>',end-start);
                        
                        start = getTimer();
                        arr = func4(arr);
                        end = getTimer();
                        trace('func4=>',end-start);
                        
                        start = getTimer();
                        arr = func5(arr);
                        end = getTimer();
                        
                        trace('func5=>',end-start);
                }
                
                private function func1(rawArr:Array):Array{
                        rawArr.sort(function():Number{ return Math.random()-0.5>0?1:-1; });
                        return rawArr;
                }
                
                private function func2(array:Array):Array
                {
                        var newArray:Array = new Array();
                        while (array.length > 0)
                        {
                                newArray.push(array.splice(Math.floor(Math.random()*array.length), 1));
                        }
                        return newArray;
                }
                
                
                private function func3(myArray:Array):Array
                {
                        for (var i:uint = 0; i < myArray.length; i++)
                        {
                                var rand:uint = int(Math.random() * myArray.length);
                                myArray.push( myArray.splice( rand, 1 )[0] );
                        }
                        return myArray;
                }
                
                private function func4(myArr:Array):Array{
                        var rnd:int;
                        var tmp:*;
                        for(var i:uint = 0;i<myArr.length;i++){
                                tmp = myArr[i];
                                rnd = Math.random()*myArr.length;
                                myArr[i] = myArr[rnd];
                                myArr[rnd] = tmp;
                        }
                        return myArr;
                }
                
                private function func5(myArr:Array):Array{
                        var rnd:int;
                        var tmp:*;
                        var len:int = myArr.length;
                        for(var i:uint = 0;i<len;i++){
                                tmp = myArr[i];
                                rnd = Math.random()*len;
                                myArr[i] = myArr[rnd];
                                myArr[rnd] = tmp;
                        }
                        return myArr;
                }
        }
}

 

看运行结果:
func1=> 568
func2=> 4740
func3=> 9412
func4=> 53
func5=> 44
 数组的所有操作下标操作是最快的。这也是数组的最基本的结构了。其他的操作都是对索引的高级处理。除了pop和push,其他都很耗时间。 所以方法4比2,3快。
方法1是个例外,之前我判断失误。原本以为1会很慢,因为他还有函数调用。后来一想,人家内部就是一个循环,并且也是交换而已。肯定不能比2,3慢。
方法5是方法4的优化。所谓优化就是不要在循环里面去array的长度而已。所以for循环的时候用i--会比i++快。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值