DELPHI求乱序数组最小值快速算法(Delphi MMX优化算法应用之三)
2008-07-06 17:52
337 查看
type PMyList = ^TMylist; TMylist = array of word; function GetMinValue(List: PMyList):Word; stdcall; var ForCount, ListCount,i: Dword; MAXVaule: int64; List0Address: Dword; begin Result := $7FFF; ListCount := High(List^) + 1; if (ListCount < 16) or ((ListCount mod 16)<>0) then begin for I := 0 to ListCount - 1 do begin if List^[i] < Result then Result := List^[i]; end; end else begin MAXVaule := $7FFF7FFF7FFF7FFF; List0Address := Dword(@List^[0]); ForCount := ListCount div 16; //4*MMX asm push eax push ecx push esi mov esi, List0Address //开始地址 mov ecx, ForCount //长度 MOVQ MM0,MAXVaule mov eax,0 @CmpLoop: prefetchnta [esi + eax + 1024] // fetch ahead by 1024 bytes movq mm1, qword [esi+eax] movq mm2, qword [esi+eax+8] movq mm3, qword [esi+eax+16] movq mm4, qword [esi+eax+24] PMINSW MM0,MM1 PMINSW MM0,MM2 PMINSW MM0,MM3 PMINSW MM0,MM4 add eax,32 sub ecx, 1 jnz @CmpLoop MOVQ MM1,MM0 PSRLQ MM1,$20 //右移 PMINSW MM0,MM1 MOVQ MM1,MM0 PSRLQ MM1,$10 //右移 PMINSW MM0,MM1 Movd eax,mm0 Mov Result,AX Sfence Emms pop esi pop ecx pop eax end; end; end;
相关文章推荐
- (转)DELPHI求乱序数组最小值快速算法(Delphi MMX优化算法应用之三)
- Delphi洗牌算法 - 将一个数组随机乱序
- ios 数组最大值,最小值,平均值,和的快速算法
- 12、Java入门—将一数组乱序排列的三种方法 (快速洗牌的小算法)
- 给定一个有序的数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉查找树?
- 算法题19 把数组排成最小的数
- 快速排序思想的应用--求数组中第k小的数
- Java数组的应用2:数组的最大,最小,求和,平均值,倒置
- 乱序数组的算法
- 程序员面试题精选100题(41)-把数组排成最小的数[算法]
- 较快速在一个数组中查找最大值和最小值
- C语言输出旋转后数组中的最小数元素的算法原理与实例
- 重拾算法之剑指Offier——旋转数组的最小数字
- Coursera_程序设计与算法_计算导论与C语言基础_数组应用练习
- 算法-旋转数组的最小数字
- 设计一个最优算法来查找一n个元素数组中的最大值和最小值。已知一种需要比较2n次的方法,请给一个更优的算法。
- 笔试算法题(31):将有序数组转换成BST表示 & 线段树的应用
- 算法导论:快速找出无序数组中第k小的数
- 程序员面试金典: 9.4树与图 4.3给定一个有序整数数组,元素各不相同且按升序排列,创建一颗高度最小的二叉查找树。 ---快速解法
- 九度OJ 1504 把数组排成最小的数【算法】-- 2009年百度面试题