懒排序(Python实现)

懒排序的实现及解析

代码实现(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),但是也不是缩的越少越好,过短的睡眠时间会影响算法的准确性,尤其是当原数组内有相同的元素时。

    可以说是无愧于懒排序之名。

  • 空间上:主要是可以减少一个结果集数组的使用。

    使用在原数组中交换的方式即可。

    但由于操作同一数组的原因,在睡眠时间过短时可能会有线程安全的问题。

总结

减少睡眠时间可以提升速度,但会降低精度。

懒排序和其他常规排序算法不太一样,它的时间复杂度很低,但是运行耗时却相当高

但是数组长度不影响排序时间可以说是这个排序最大的亮点了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值