|
本帖最后由 CNWTEPRG 于 2020-3-18 18:10 编辑
- .版本 2
- .支持库 spec
- .程序集 程序集1
- .子程序 _启动子程序, 整数型, , 请在本子程序中放置易模块初始化代码
- _临时子程序 () ' 在初始化代码执行完毕后调用测试代码
- 返回 (0) ' 可以根据您的需要返回任意数值
- .子程序 _临时子程序
- .局部变量 数组, 整数型, , "1000000"
- .局部变量 返回值, 整数型, , "0"
- .局部变量 计数, 整数型
- .局部变量 时间, 整数型
- 置随机数种子 ()
- 输出调试文本 (“正在初始化数组...”)
- .计次循环首 (取数组成员数 (数组), 计数)
- 数组 [计数] = 取随机数 (, ) × 取随机数 (, ) × 取随机数 (, )
- .计次循环尾 ()
- 时间 = 取启动时间 ()
- 输出调试文本 (“正在去重...”)
- 整数型数组_去重_BITMAP (数组, 返回值)
- 调试输出 (取启动时间 () - 时间, 取数组成员数 (数组), 取数组成员数 (返回值))
- .子程序 整数型数组_去重_BITMAP, , 公开, 无论数组大小,本算法需要512MB固定大小的内存空间
- .参数 数组, 整数型, 数组
- .参数 返回值, 整数型, 参考 数组
- .局部变量 值, 整数型
- .局部变量 字节地址, 整数型
- .局部变量 字节值, 字节型
- .局部变量 位地址, 字节型
- .局部变量 成员数, 整数型
- .局部变量 计数, 整数型
- .局部变量 位映射表, 字节集
- 清除数组 (返回值)
- 位映射表 = 取空白字节集 (536870912)
- 成员数 = 取数组成员数 (数组)
- .计次循环首 (成员数, 计数)
- 值 = 数组 [计数]
- 字节地址 = 无符号右移3位并加1 (值)
- 位地址 = 左移 (1, 位与 (值, 7))
- 字节值 = 位映射表 [字节地址]
- .如果真 (位与 (字节值, 位地址) = 0)
- 位映射表 [字节地址] = 位或 (字节值, 位地址)
- 加入成员 (返回值, 值)
- .如果真结束
- .计次循环尾 ()
- .子程序 无符号右移3位并加1, 整数型
- .参数 欲移动的整数, 整数型, , 易语言自带的右移为有符号右移,与无符号右移计算结果不同
- 置入代码 ({ 139, 69, 8, 193, 232, 3, 64, 201, 194, 4, 0 })
- ' mov eax,[ebp+8]
- ' shr eax,3
- ' inc eax
- ' leave
- ' retn 4
- 返回 (0)
复制代码 |
|