`
wangangie20
  • 浏览: 45980 次
  • 性别: Icon_minigender_2
  • 来自: 厦门
最近访客 更多访客>>
社区版块
存档分类
最新评论

高效的flash数组重排算法

阅读更多

在程序设计中很多时候我们需要对数组重排,所以探求一种高效的重排算法还是很有必要的。上午逛论坛时看到一个帖子中的“简洁、高效”的重排算法,如下:
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
分享到:
评论

相关推荐

    数组重排例子.vi

    数组重排例子

    几种重排算法在地震信号处理中的实验分析

    阐述了时频分析技术中重排算法的基本思想,给出了部分重排算法的局部能量重心表达式;设计了两个数值实验,利用几种重排算法对单道地震信号进行了计算和分析比较。结果表明:重排算法不仅能有效抑制交叉项,同时也能提高...

    c++的车厢重排算法 数据结构

    c++ 车厢重排算法 数据结构的作业 VS2005,VS2010都能打开

    A*算法求解重排九宫问题

    用A*算法求解重排九宫问题,将九宫格以3*3矩阵形式设计为动态对象数组类的对象,形式比较新颖。希望对大家了解A*算法,重排九宫,以及c++的动态对象数组类有所帮助。文档包含一个动态对象数组类头文件和一个源文件。

    c语言列车车厢重排问题

    这个问题可以看作是一个经典的算法问题,类似于数组重排或列表排序。 在C语言中,你可以使用各种排序算法来解决这个问题。最简单的可能是冒泡排序,但它的效率不是最高的。更高效的算法包括快速排序、归并排序等。 ...

    易语言两种文本型数值数组去重复并排序源码

    简单的两种文本型数值数组去重复并排序。(1)下标法。(2)节点法。@cf2006a。

    几种简单排序算法的实现以及时间比较

    选择排序 二分排序 及时终止的选择排序 冒泡排序 及时终止的冒泡排序 快速排序 插入排序 希尔排序 堆排序 利用附加数组重排数组元素 原地重排数组元素

    编码练习题(车厢重排算法)

    代码实现了基本的功能,但是...设计并实现车厢重排算法; 分析算法的时间性能。 581742963 --------- H1 ----------- 987654321 --------- H2 ---------- 入 轨 --------- H3 ----------- 出 轨 图1 转轨站示意图

    搜索算法解决九宫重排问题

    不同搜索算法解决九宫重排问题,JAVA语言实现广度优先,全局择优算法解九宫重排问题,输出路径。。。。。。

    论文研究-WSN中利用蚁群路径优化的时隙选择重排算法.pdf

    针对无线传感器网络(WSN)汇聚传输中的数据传输时间和功耗问题,提出了考虑时间同步和唤醒延迟的汇聚传输时隙选择重排算法。将时分多址接入(TDMA)用作介质访问协议,并允许每个节点在传输时隙期间可以发送或接收...

    非线性时频分布重排算法在非合作跳频信号检测中的应用 (2007年)

    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个).zip

    labview学习资料-labview初级例程源码(76个): Area.vi Control.llb demo.vi EXA1.vi try_start3.vi 一维数组插入.vi 一维数组移位练习.vi 个人信息.ctl ...数组重排例子.vi 数组阙值.vi 整数转换成布尔数

    重排九宫格代码C++

    分别使用广度优先搜索、深度优先搜索和 A*算法实现重排九宫格问题; 使用的搜索方式可在程序内修改; 可以自行输入初始状态和目标状态 可以选择是否展示具体搜索步骤; 程序输出在该搜索方法下的最佳路径以及使用该...

    重排九宫(广度优先)

    重排九宫的广度优先算法 有代价函数实现局部优先 用哈希表来看是否已经在open表中

    基于超图的非规则应用局部性优化 (2012年)

    针对非规则循环应用中存在的一次迭代访问多个间接数组的问题,给出了超图数组的形式化描述,提出了三种基于超图的数据重排算法,即基于超图的非重复编码数据重排算法、基于超图的回溯搜索数据重排算法和基于超图的先...

Global site tag (gtag.js) - Google Analytics