懒排序的实现及解析
代码实现(Python)
import threading
import time
def process(num):
time.sleep(num)
result.append(num)
if __name__ == '__main__':
arr = [1, 4, 7, 2, 5, 8, 3, 6, 9]
threads = []
result = []
for i in arr:
sub = threading.Thread(target=process, args=[i])
threads.append(sub)
sub.start()
for i in threads:
i.join()
print(result)
代码说明
这个排序的原理是利用线程的等待,来确定顺序。
所以它的执行时间取决于排序数组内最大值,可以说是相当慢。
对于它的空间消耗上来说,需要使用两个额外的数组来存储线程队列和结果数组,也是非常耗费内存的。
优化思路
这里给出一些简单的优化思路
-
时间上:由于睡眠时间=执行时间取决于排序数组内最大值,所以这里是最影响时间的地方。
可以用等比缩小后的值作为睡眠时间来极大缩短该算法的运行时间。
例如
time.sleep(num)
修改为time.sleep(num / 100)
,但是也不是缩的越少越好,过短的睡眠时间会影响算法的准确性,尤其是当原数组内有相同的元素时。可以说是无愧于懒排序之名。
-
空间上:主要是可以减少一个结果集数组的使用。
使用在原数组中交换的方式即可。
但由于操作同一数组的原因,在睡眠时间过短时可能会有线程安全的问题。
总结
减少睡眠时间可以提升速度,但会降低精度。
懒排序和其他常规排序算法不太一样,它的时间复杂度很低,但是运行耗时却相当高。
但是数组长度不影响排序时间可以说是这个排序最大的亮点了。