在程序设计中很多时候我们需要对数组重排,所以探求一种高效的重排算法还是很有必要的。上午逛论坛时看到一个帖子中的“简洁、高效”的重排算法,如下:
function randomsort() {
return Math.random()>.5 ? -1 : 1;
}
function arrRandomSort(arr){
arr.sort(randomsort);
}仅仅4行代码,当时我那个惭愧啊,自己以前怎么没有想到这么简单的方法了?还绕了一个大圈子来写这个重排。激动之后做了个测试:
function randomsort() {
return Math.random()>.5 ? -1 : 1;
}
function arrRandomSort(arr){
arr.sort(randomsort);
}
_array = [];
for (i = 0;i使用上面的算法对一个1000个元素的数组进行重排,执行时间是居然是210毫秒,有些恐怖,初步估计是因为sort函数造成的,因此将上面代码里添加了一个计数器来跟踪sort参数中的函数的执行次数。
_global.n = 1;
function randomsort() {
n++;
return 1;
}
function arrRandomSort(arr){
arr.sort(randomsort);
}
_array = [];
for (i = 0;i 看来效率的消耗果然是因为sort函数,对这1000个元素的数组进行排序,运行了7153毫秒,randomsort函数被执行了499501次,显然,这段看似简洁的代码其实并不实用。而sort函数内部到底是使用什么算法来完成的这个排序了?以至于需要执行这么多次比较函数。简单排序?快速排序?我也不太清楚,有空了再做进深入测试,暂且不在此文讨论范围之内。
在我搜索Array.sort的内部实现时发现了一个帖子
《用array.sort进行随机排序》
,原来有关于用sort方法排序已经引起了很大的争议,而此文作者是站在支持sort排序的立场的,通过与别人的代码比较,他最初得出的结论是Array.sort来做数组重排是有利的,而跟帖中又出现了一个更为高效的算法,此算法跟sort方法相比效率要高很多,特推荐出来供大家借鉴。下面是我用此算法和sort算法做的对比,分别对100个元素的数组进行100次重排,比较其总消耗的时间,结果消耗时间分别为70MS和1448MS,其中红色部分为效率更佳算法:
/*算法一 */
Array.prototype.random = function($lim:Number):Array {
var tmp:Array = this.concat();
var len:Number = tmp.length;
//trace(($lim && $lim
本文转自:http://www.5uflash.com/flashjiaocheng/Flashaschengxu/482.html
发表评论
-
flash连接asp数据库简单通讯
2010-04-10 13:45 632第一步要做的是建立数据库。我们使用Access数据库为例,表名 ... -
flash连接asp数据库简单通讯
2010-04-10 13:45 961第一步要做的是建立数据库。我们使用Access数据库为例,表名 ... -
一个flash loading效果
2010-04-10 13:44 673在公司里做动画时候做的一个loading的效果,可以参考但不要 ... -
非常棒的loading制作教程
2010-04-10 13:44 579首先,想说一下我写此文的动机。记得很早之前我曾经说过“没有l ... -
flash进度控制条
2010-04-10 13:44 787这是我在做flash mv时做的,看下效果: 下面是代码: / ... -
AS3 中的is与as操作符
2010-04-09 14:08 805(1) is运算符 在AS3.0新增加的is运算符,主要功 ... -
AS3 中的is与as操作符
2010-04-09 14:08 681(1) is运算符 在AS3.0新增加的is运算符,主要功 ... -
AS3中XML删除节点
2010-04-09 14:08 609E4X规范中定义有delete和deleteByIndex方法 ... -
AS3中XML删除节点
2010-04-09 14:08 789E4X规范中定义有delete和deleteByIndex方法 ... -
用实验中的Actionscript 3.0实现颜色拾取
2010-04-09 14:07 740var linkageId = "Bliss.jp ... -
as3.0编程:鼠标的操作
2010-04-09 11:59 698取得鼠标的坐标: Source: addEve ... -
as3.0编程:鼠标的操作
2010-04-09 11:59 575取得鼠标的坐标: Source: addEve ... -
as3.0编程:键盘的操作
2010-04-09 11:59 965键盘的点击与弹起: Source: stage ... -
as3.0编程:键盘的操作
2010-04-09 11:59 817键盘的点击与弹起: Source: stage ... -
flash as3做几何画板-先写一个按钮类
2010-04-09 11:58 844package draw1 { import ... -
Flash与Ps打造模糊渐变动画
2010-04-08 11:32 675在电子杂志设计制作尤其是模版制作的过程中,需要使用Flash专 ... -
跑动的小火柴人(flash动画)
2010-04-08 11:32 596本教程描绘的是完全用ActionScript做的一个火柴棍小人 ... -
跑动的小火柴人(flash动画)
2010-04-08 11:31 678本教程描绘的是完全用ActionScript做的一个火柴棍小人 ... -
Flash中的电影艺术之镜头技巧
2010-04-08 11:31 713Flash中的电影艺术 好像这里的文章大部分是关于AS的,其 ... -
Flash中的电影艺术之镜头技巧
2010-04-08 11:31 596Flash中的电影艺术 好像这里的文章大部分是关于AS的,其 ...
相关推荐
数组重排例子
阐述了时频分析技术中重排算法的基本思想,给出了部分重排算法的局部能量重心表达式;设计了两个数值实验,利用几种重排算法对单道地震信号进行了计算和分析比较。结果表明:重排算法不仅能有效抑制交叉项,同时也能提高...
c++ 车厢重排算法 数据结构的作业 VS2005,VS2010都能打开
用A*算法求解重排九宫问题,将九宫格以3*3矩阵形式设计为动态对象数组类的对象,形式比较新颖。希望对大家了解A*算法,重排九宫,以及c++的动态对象数组类有所帮助。文档包含一个动态对象数组类头文件和一个源文件。
这个问题可以看作是一个经典的算法问题,类似于数组重排或列表排序。 在C语言中,你可以使用各种排序算法来解决这个问题。最简单的可能是冒泡排序,但它的效率不是最高的。更高效的算法包括快速排序、归并排序等。 ...
简单的两种文本型数值数组去重复并排序。(1)下标法。(2)节点法。@cf2006a。
选择排序 二分排序 及时终止的选择排序 冒泡排序 及时终止的冒泡排序 快速排序 插入排序 希尔排序 堆排序 利用附加数组重排数组元素 原地重排数组元素
代码实现了基本的功能,但是...设计并实现车厢重排算法; 分析算法的时间性能。 581742963 --------- H1 ----------- 987654321 --------- H2 ---------- 入 轨 --------- H3 ----------- 出 轨 图1 转轨站示意图
不同搜索算法解决九宫重排问题,JAVA语言实现广度优先,全局择优算法解九宫重排问题,输出路径。。。。。。
针对无线传感器网络(WSN)汇聚传输中的数据传输时间和功耗问题,提出了考虑时间同步和唤醒延迟的汇聚传输时隙选择重排算法。将时分多址接入(TDMA)用作介质访问协议,并允许每个节点在传输时隙期间可以发送或接收...
Villedistribution,RSPWVD)算法和基于Morlet小波的尺度图重排(rearrangement ofthe Morlet scale chart,RMSC)算法识别信号的基本原理,并导出了各自的重排算法表达式。分析结果表明,RMSC算法不仅可以获得比...
实现一个能够演示解决重排九宫问题的小软件。要求用3种不同方法解决同一个问题,软件自动产生不同的初始状态和目标状态,然后能够给出每一个搜索步骤,最后标示出完整的解路径,并指明是否为最优解。
数据结构 算法与应用 队列应用于火车重排
一列货车共有n 节车厢,每个车厢都有自己的编号,编号范围从1~n。给定任意次序的车厢, 通过转轨站将车厢编号按...缓冲轨按照先进先出方式,编写一个算法,将任意次序的车厢进行重排,输出每个缓冲轨 中的车厢编号。
c语言的简单进行排序的算法,代码可直接用
#include<iostream> #include using namespace std; void Reset(int in[], int n);//把车厢重新排布 void Output(int& minC, int& minB, stack<int> buffer[], int n); // 此函数把车厢从缓冲铁轨送至出轨处,同时...
labview学习资料-labview初级例程源码(76个): Area.vi Control.llb demo.vi EXA1.vi try_start3.vi 一维数组插入.vi 一维数组移位练习.vi 个人信息.ctl ...数组重排例子.vi 数组阙值.vi 整数转换成布尔数
分别使用广度优先搜索、深度优先搜索和 A*算法实现重排九宫格问题; 使用的搜索方式可在程序内修改; 可以自行输入初始状态和目标状态 可以选择是否展示具体搜索步骤; 程序输出在该搜索方法下的最佳路径以及使用该...
重排九宫的广度优先算法 有代价函数实现局部优先 用哈希表来看是否已经在open表中
针对非规则循环应用中存在的一次迭代访问多个间接数组的问题,给出了超图数组的形式化描述,提出了三种基于超图的数据重排算法,即基于超图的非重复编码数据重排算法、基于超图的回溯搜索数据重排算法和基于超图的先...