- 浏览: 1084676 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (695)
- 心情日记 (14)
- AS开发工具 (12)
- 文章转载 (99)
- AIR (5)
- 问题总结 (46)
- SWF格式 (7)
- 测试总结 (10)
- 外文资料 (9)
- 算法技术 (33)
- AS3常用开源库 (43)
- 源码范例 (102)
- FLEX (72)
- FLASH 优化 (33)
- 游戏开发 (49)
- 开发技术 (11)
- 工作应用 (34)
- AS3收集 (140)
- WebBase (0)
- 开发构想 (4)
- 设计模式 (2)
- 框架和框架范例 (19)
- RED5 (3)
- java开发 (3)
- JAVA (1)
- FLASH-3D (23)
- 3D (6)
- 书籍 (10)
- 业界信息资料 (3)
- C# (1)
- JavaScript (12)
- HTML5 (6)
- Flixel (1)
- D5Power RPG网页游戏引擎 (0)
- ColorMatrixFilter - 获得相应颜色的色调 函数 (0)
- Starling (0)
最新评论
-
老顽童203:
字体
水果忍者鼠标跟随特效制作[转载] -
hairball00:
[转] 放出超多的Flash组件源代码 -
he74552775:
flash AS3 RegExp简单功能用法(转) -
hanshuai1232000:
第四点,有利也有弊,等你做了大型的aprg,你就知道了
[转]位图数据内存优化 -
yangfantao:
太感谢
[转] 放出超多的Flash组件源代码
http://bbs.9ria.com/viewthread.php?tid=75306&extra=page%3D1%26amp;orderby%3Ddateline%26amp;filter%3D2592000
呵呵,lz要去搜搜排序算法了.
自带的sort确实比冒泡,插入这些简单排序算法快.但不如一些高级排序(如快排,希尔,堆排,归并等)
另外排序和浮动数有什么关系,不知道面试官搞什么的?
他说的分开来排序应该是归并排序吧
数组长了,占内存大了,理论上来讲排序时每push一次耗时会增大。分成多个的话,push能节省时间。但是按什么分?按大小分的话还得做几十万次比较和更多次的push。根据不同的测试环境来说。。动态内存的时间损耗和浮点数大小比较的时间损耗又可能不同。
10万个,我机器上用sort测试,直接卡死。1万个勉强能跑下
只要不卡死就赢了。
在我的测试环境,测试两组1万个排序的结果,是分开排序快一些。如下代码
1万个随机数生成
复制代码
我写了这么多字。能坚持看完的话就给我加点银子吧
没测试过怎么会乱说呢.
点击鼠标就可以输出结果了,简单排序注释了,因为非常慢(你可以试试).
debug测试和release测试得的结果是不一样的,最终效率当然以release为准.
想看到release的结果请自己加一个txt让结果显示出了.
release模式下,sort比其他几个高级排序慢10倍或者以上
呵呵,lz要去搜搜排序算法了.
自带的sort确实比冒泡,插入这些简单排序算法快.但不如一些高级排序(如快排,希尔,堆排,归并等)
另外排序和浮动数有什么关系,不知道面试官搞什么的?
他说的分开来排序应该是归并排序吧
数组长了,占内存大了,理论上来讲排序时每push一次耗时会增大。分成多个的话,push能节省时间。但是按什么分?按大小分的话还得做几十万次比较和更多次的push。根据不同的测试环境来说。。动态内存的时间损耗和浮点数大小比较的时间损耗又可能不同。
10万个,我机器上用sort测试,直接卡死。1万个勉强能跑下
只要不卡死就赢了。
在我的测试环境,测试两组1万个排序的结果,是分开排序快一些。如下代码
1万个随机数生成
var i=0 var arr=[] for(i=0;i<10000;i++){ arr[i]=Math.random() } 复制代码 直接sort 2668ms var t=getTimer() var arr_=arr.sort() trace(getTimer()-t) //2668ms 复制代码 分块sort 2194ms var arr1=[] var arr2=[] var arr3=[] var arr4=[] var arr5=[] for(i=0;i<10000;i++){ var temp=arr[i] if(temp<.2){ arr1.push(temp) }else if(temp<.4){ arr2.push(temp) }else if(temp<.6){ arr3.push(temp) }else if(temp<.8){ arr4.push(temp) }else{ arr5.push(temp) } } arr1.sort() arr2.sort() arr3.sort() arr4.sort() arr5.sort() var arr_=arr1.concat(arr2).concat(arr3).concat(arr4).concat(arr5) trace(getTimer()-t) //2194
复制代码
我写了这么多字。能坚持看完的话就给我加点银子吧
没测试过怎么会乱说呢.
package { import flash.display.Sprite; import flash.text.TextField; import flash.utils.getTimer; import flash.events.*; /** * ... * @author ff */ public class main2 extends Sprite { public function main2() { stage.addEventListener("click", onClick); } private function onClick(e:MouseEvent):void { sortTest(); } private function sortTest():void {//各种排序效率测试 var tArr:Array = new Array(); var qArr:Array = new Array(); var iArr:Array = new Array(); var sArr:Array = []; var gArr:Array = []; var hArr:Array = []; var ppArr:Array = []; var selectArr:Array = []; //数组的长度 var testLength:int = 100000; //让各个数组元素随机 for (var i:int = 0; i <testLength; i++) { var ran:int = int(Math.random() * testLength); //trace("ran",ran); tArr.push(ran); qArr.push(ran); iArr.push(ran); sArr.push(ran); gArr.push(ran); hArr.push(ran); ppArr.push(ran); selectArr.push(ran); } var d1:int; /*d1 = getTimer(); insertSort(iArr,0,iArr.length-1);//插入 trace("插入排序","排列",testLength," 时间: ",getTimer() - d1); d1 = getTimer(); ppSort(ppArr);//冒泡 trace("冒泡排序", "排列", testLength, " 时间: ", getTimer() - d1); */ d1 = getTimer(); qSort(qArr,0,qArr.length-1);//快速排序 trace("快速排序","排列",testLength," 时间: ",getTimer() - d1); d1 = getTimer(); shlSort(sArr,sArr.length);//希尔 trace("希尔排序","排列",testLength," 时间: ",getTimer() - d1); d1 = getTimer(); MgbSort(gArr,0,gArr.length-1);//归并,比希尔慢一些但他是稳定的 trace("归并排序","排列",testLength," 时间: ",getTimer() - d1); //trace(gArr); d1 = getTimer(); tArr.sort(); trace("数组自带排序","排列",testLength," 时间: ",getTimer() - d1); } private function ppSort(data:Array):void { var len:int = data.length; var temp:int = 0; for (var i:int = 0; i < len; i++) { for (var j:int = len-1; j >= i; j--) { if (data[j] > data[j - 1]) { temp = data[j]; data[j] = data[j - 1]; data[j - 1] = temp; } } } } private function selectSort(data:Array):void { var len:int = data.length; var tempId:int; var temp:int; while (--len) { tempId = len - 1; for(var i:int=len-2;i>=0;i--){ if(data[i]>data[tempId]){ //如果大于,把这个索引变最大值索引 tempId=i; } } //最后把最大的和最后一个交换.同时在while条件中把length减一 if(tempId!=len-1){ temp=data[tempId]; data[tempId]=data[len-1]; data[length-1]=temp; } } } private function qSort(data:Array, left:int, right:int):void { var min:int=left; var max:int=right; var key:int=data[left]; var temp:int; while (true) { while(min<max&&data[max]>=key){ max--; } while(min<max&&data[min]<=key){ min++; } if(min<max){ temp=data[min]; data[min]=data[max]; data[max]=temp; }else{//min==max 结束循环 break; } } data[left]=data[min]; data[min]=key; if(min-1>left){ qSort(data,left,min-1); } if(max+1<right){ qSort(data,max+1,right); } } private function insertSort(a:Array,start:int,n:int):void { for(var i:int = start-1; i < n; i++) { var temp:int= a[i]; for (var j:int = i; j > start && temp < a[j - 1]; j--) { a[j] = a[j - 1]; } a[j] = temp; } } private function shlSort(p:Array,n:int):void { var k:int; var i:int; var j:int; var t:int; k=n/2; while(k>0) { for(j=k;j<=n-1;j++) { t=p[j];i=j-k; while((i>=0)&&(p[i]>t)) { p[i+k]=p[i];i=i-k; } p[i+k]=t; } k=k/2; } } private function gbSort(data:Array, left:int, right:int):void { var len:int = (right - left) + 1; var center:int = len/2 + left; var tempData:Array = []; var index:int = 0; var i:int; var d1Index:int=left; var d2Index:int = center;//搞了半天,这里的center错写成right了.苦啊 while(d1Index<center&&d2Index<=right){ if(data[d1Index]>data[d2Index]){ tempData[index++]=data[d2Index++]; }else{ tempData[index++]=data[d1Index++]; } } while(d1Index<center){ tempData[index++] = data[d1Index++]; } while(d2Index<=right){//同上 tempData[index++] = data[d2Index++]; } for(i=0;i<len;i++){ data[left+i]=tempData[i]; } } private function MgbSort(a:Array,left:int,right:int):void{ if (left < right) { var center:int = left+(right-left+1) / 2;//取得中点 //将原来序列分为两段 MgbSort(a, left, center-1); MgbSort(a, center, right); //合并刚才分开的两段,得到原来序列的有序序列 //trace("center",center); gbSort(a,left,right); } } } }
点击鼠标就可以输出结果了,简单排序注释了,因为非常慢(你可以试试).
debug测试和release测试得的结果是不一样的,最终效率当然以release为准.
想看到release的结果请自己加一个txt让结果显示出了.
release模式下,sort比其他几个高级排序慢10倍或者以上
发表评论
-
[转] Actionscript项目嵌入图片(设置九宫格缩放)
2011-07-27 02:04 2352我们知道在Flex项目中,嵌入外部图片,可以使用 [E ... -
8款bitmap操作类
2011-07-15 11:38 08款bitmap操作类Bitmap在我们的开发中使用率很 ... -
[转] 加载SWF时一些有趣的测试
2011-06-30 21:57 1286这几天做了一个关于加载和内存变化.以及被加载文件的清除的测试; ... -
[转] 关于获取“焦点”及flash播放器“最小化”心得!
2011-05-18 17:26 0研究了下,当运行的flash播放器,如何获取焦点问题。 也是大 ... -
AS3 ADDCHILD 的又一个BUG
2011-05-15 01:02 0AS3 ADDCHILD 的又一个BUG packa ... -
关于事件冒泡, 只要进入形成了显示列表树的对象们中的一个子节点发出事件就一定会走DOM事件机制
2011-04-19 00:31 0关于事件冒泡, 只要进入形成了显示列表树的对象们中的一个子节 ... -
[转]几种位图渲染角色动画的实现方法的性能差异
2011-04-01 13:01 3404http://bbs.9ria.com/viewthread. ... -
[心得] 关于BitmapData.draw()效率的一点发现
2011-03-23 18:55 0SP位图引擎制作中,目前刚写完MC逐帧转连续BitmapDa ... -
FP10.1的绘制对比测试
2011-03-08 13:41 0http://ghostcat.googlecode.com/ ... -
[转]ApplicationDomain.currentDomain的细节
2011-02-25 21:09 2775http://flashteam.tencent.com/po ... -
FLASH的包内类的静态变量的默认值无法是包外类
2011-02-25 03:47 0FLASH的包内类的静态变量的默认值无法是包外类 -
[转]区别AS3.0中MOUSE_OVER、ROLL_OVER,MOUSE_OUT、ROLL_OUT
2011-02-25 00:23 1186http://www.yaotaiyang.com/lates ... -
遍历移除时,不要用while(numChildren==0)这是因为在时间轴上是允许某个元件为null,且占据numChildren的一个位置.
2011-01-30 23:55 0另外遍历移除时,不要用while(numChildren==0 ... -
FOR EACH 遍历数组 是按照顺序来遍历的
2010-12-20 20:02 4910FOR EACH 遍历数组 是按照顺序来遍历的 v ... -
Sprite graphics 的极限位置的测试, 105000000
2010-12-20 01:26 0var sp:Sprite = new Sprite() ... -
[心得] FLASH自带的HASHMAP慢的一塌糊涂啊 千万不要使用 超长的STRING类型的KEY
2010-12-07 12:16 2064var dic:Dictionary = new Di ... -
AS3深拷贝的一个测试总结
2010-10-12 22:50 1256package { import flash. ... -
FLASH 数组 POP PUSH UNSHIFT SHIFT测试
2010-09-25 13:59 2116博客地址:http://as3.iteye.com/admin ...
相关推荐
在“浮点数16机制”这个主题中,我们关注的是如何理解和实现这两种转换,特别是当涉及到浮点数的二进制表示(即IEEE 754标准)。IEEE 754标准定义了浮点数的存储结构,包括符号位、指数和尾数等部分。在进行16进制到...
当涉及到64位IEEE 754双精度浮点数到40位VC33浮点数的转换时,这个过程更为复杂。双精度浮点数包含1位符号位、11位指数和52位尾数。由于40位VC33格式无法完全容纳所有64位的信息,因此必须进行舍入操作,可能会影响...
### 4字节浮点数算法解析 #### 一、基本概念 在计算机科学中,浮点数是一种能够表示实数的数据类型,广泛应用于需要精确处理小数的场景。4字节浮点数通常指的是使用32位来存储一个浮点数的方式。这种格式遵循IEEE ...
在处理浮点数时,需要额外的库函数或者自定义算法来完成转换。C51可能不直接支持浮点数到字符的转换,因此,提供的`float_2_char`代码可能是实现了这种转换的自定义函数。 6. **优化与注意事项** 在单片机中进行...
"十六进制转浮点数.vi"这个文件很可能是一个LabVIEW VI,它实现了上述转换功能。使用这个VI时,你需要将16进制的字符串输入到VI中,VI会输出相应的浮点数。如果你需要查看或修改这个VI的工作原理,可以打开它来查看...
单精度浮点数在内存中由32位组成,分为四个部分:符号位(1位)、指数部分(8位)和尾数部分(23位)。其中,符号位决定数值的正负,指数部分存储指数(以偏移量形式),尾数部分存储小数部分。在进行十六进制到...
十进制浮点数转IEEE754浮点数,利用C语言中的union
至于压缩包中的文件名,“mingwm10.dll”通常是一个动态链接库文件,用于Windows平台上的MinGW编译环境,它提供了对Windows API的接口,可能包含与HEX和浮点数转换相关的函数。而“Hex&Float-s.exe”看起来是一个可...
`Form1.cs`可能是用于创建用户界面的代码,而`浮点数的DFA.exe`是编译后的可执行文件,用于运行这个浮点数识别算法。 总的来说,DFA识别浮点数算法涉及到状态设计、状态转换规则的制定以及输入字符的处理逻辑。通过...
十六进制到浮点数的转换通常涉及以下几个步骤: 1. **十六进制到二进制转换**:首先,我们需要将十六进制数转换成二进制形式。每个十六进制数字对应四位二进制数,例如,A = 1010, B = 1011, C = 1100, D = 1101, E...
JavaScript实现浮点数转十六进制字符的过程涉及到了浮点数的表示、IEEE 754标准、二进制与十六进制的转换等多个知识点。由于JavaScript直接使用浮点数转十六进制的功能实现并不直接,因此需要借助其他方法来实现。...
浮点数排序器的设计采用了N个排序节点串联,形成一个完整的排序器。其中,N表示待排序数据的数量。为了保证排序过程的高效执行,采用流水线的方式,通过两个系统状态标签来驱动节点内的控制逻辑,以此确定新数据的...
这就是著名的浮点数舍入误差问题,它在计算领域是一个重要的概念,需要在设计算法和编写代码时予以考虑。 在编程语言中,如Python、Java、C++等,都有内置的函数或者库来支持浮点数和十进制数之间的转换,例如...
在本案例中,我们讨论的是一个LabVIEW程序,名为“十六进制转浮点数.vi”,它专门用于处理与下位机通信过程中涉及的十六进制和浮点数之间的转换问题。下位机通常采用这种格式传递数据,因为十六进制表示形式更利于...
标题中的“16进制与10进制浮点数互转工具”指的是一个软件应用,它能够帮助用户将基于IEEE 754标准的16进制表示的浮点数转换为十进制形式,反之亦然。这样的工具对于理解和调试涉及浮点数计算的程序非常有用,尤其是...
"面试之大数找关键值(如从10亿个浮点数中找出最大的1万个)" 本文讨论了一道常见的笔试面试题目:从10亿个浮点数中找出最大的1万个。这个问题看似简单,但实际上却具有很高的难度,因为处理如此大量的数据需要考虑...
CHQsqrt_float这个文件名可能是用于实现平方根运算的Verilog模块,这对于浮点数转换也非常重要,因为浮点数的平方根通常不直接可用,需要通过特定的算法如新二分法(Babylonian method)或快速傅里叶变换(FFT-based...
### 浮点数与定点数的相互转换 #### 一、引言 在计算机科学领域,数据表示方式的选择...总之,掌握浮点数与定点数之间的相互转换不仅能够帮助我们在实际编程过程中更加灵活地处理数值问题,还能提高程序的整体效率。
在VB写上位机与仪表设备通信时,经常会遇到需要将返回的四字节数据转换成10进制...本实例就是实现IEEE-574四字节转10进制浮点数,以及10进制转IEEE-574四字节数据。希望能给做项目卡在这一个问题上的朋友们有帮助。