高效的flash数组重排算法

文章对比了一种看似简洁但效率低下的数组重排方法与另一种更为高效的算法。通过对两种算法进行100次100元素数组重排的测试,高效算法仅耗时70ms,远低于前者1448ms的耗时。文章提供了具体代码示例及测试结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在程序设计中很多时候我们需要对数组重排,所以探求一种高效的重排算法还是很有必要的。上午逛论坛时看到一个帖子中的“简洁、高效”的重排算法,如下:
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的内部实现时发现了一个帖子
[url=http://bbs.blueidea.com/redirect.php?fid=4&tid=2660001&goto=nextoldset]《用array.sort进行随机排序》[/url]
,原来有关于用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值