|
发表于 2019-7-6 11:38:52
|
显示全部楼层
广东省广州市
本帖最后由 534310554 于 2019-7-6 12:01 编辑
.版本 2
.支持库 EThread
.支持库 spec
.程序集 窗口程序集_启动窗口
.子程序 _按钮1_被单击
启动线程 (&线_测试, , )
.子程序 线_测试
.局部变量 整数组, 整数型, , "10000000"
.局部变量 整数组2, 整数型, , "0"
.局部变量 计时, 整数型
.局部变量 i, 整数型
.计次循环首 (取数组成员数 (整数组), i)
整数组 = 随机_取整数 (1, 10000)
.计次循环尾 ()
整数组2 = 整数组
调试输出 (“start”)
计时 = 取启动时间 ()
数组_去重复_整数型 (整数组)
调试输出 (取启动时间 () - 计时)
计时 = 取启动时间 ()
数组_去重复_整数型2 (整数组2)
调试输出 (取启动时间 () - 计时)
调试输出 (“end”)
.子程序 数组_去重复_整数型, 整数型, 公开, 返回剩余不重复数组的成员数量
.参数 整数数组, 整数型, 数组, 要去重复的 整数数组
.局部变量 成员数, 整数型
.局部变量 i, 长整数型
.局部变量 a, 整数型
数组排序 (整数数组, 真)
成员数 = 取数组成员数 (整数数组)
i = 0
a = 1
.判断循环首 (a ≤ 成员数)
i = i + 1
整数数组 = 整数数组 [a]
.循环判断首 ()
a = a + 1
.如果真 (a > 成员数)
跳出循环 ()
.如果真结束
.循环判断尾 (整数数组 = 整数数组 [a])
.判断循环尾 ()
重定义数组 (整数数组, 真, i)
返回 (i)
.子程序 数组_去重复_整数型2, 整数型, 公开, 返回剩余不重复数组的成员数量
.参数 整数组, 整数型, 参考 数组, 要去重复的 整数数组
.局部变量 整数组2, 整数型, , "0"
.局部变量 成员数, 整数型
.局部变量 i, 整数型
.局部变量 i2, 整数型
.局部变量 开始, 整数型
.局部变量 结束, 整数型
.局部变量 整数, 整数型
.计次循环首 (取数组成员数 (整数组), i)
i2 = 0
开始 = 1
结束 = 成员数
.判断循环首 (开始 ≤ 结束)
i2 = 开始 + (结束 - 开始) ÷ 2
整数 = 整数组 - 整数组2 [i2]
.判断开始 (整数 = 0)
跳出循环 ()
.判断 (整数 > 0)
开始 = i2 + 1
.默认
结束 = i2 - 1
.判断结束
.判断循环尾 ()
.如果 (整数 = 0 且 i2 ≠ 0)
到循环尾 ()
.否则
.如果真 (整数 > 0)
i2 = i2 + 1
.如果真结束
.如果 (成员数 = 0)
加入成员 (整数组2, 整数组 )
.否则
插入成员 (整数组2, i2, 整数组 )
.如果结束
成员数 = 成员数 + 1
.如果结束
.计次循环尾 ()
整数组 = 整数组2
返回 (成员数)
##########################
试试看这段代码,你测试的速度快,很可能是数据的问题(我刚刚测试了数据是全为0的,确实能达到毫秒级),但如果涉及到超大成员的随机数据,核心库的 数组排序()就要好几秒甚至几十秒
下面是我用二分法写的去重,测试结果如下:
* 16828.000000(你的)
* 5203.000000(我的)
还有一个问题,如果 随机_取整数 (1, 10000)中的10000改为1000,你的程序直接就跑不动了,我等了几分钟都没执行完,不等了
|
|