睡眠排序:
为需要排序的n个数创建n个进程/线程。
每个线程睡眠与数相等的时间,类似遇到5就睡眠5秒再醒来。
最小的数对应的进程最早醒来,最早被输出。
所有线程醒来时,排序结束。
# -*- coding: utf-8 -*-
from multiprocessing import Pool
import time
def long_time_task(num):
time.sleep(num)
print(num)
if __name__ == '__main__':
arr = [2, 1, 7.6, 4, 5.45,5.33,5.32, 4.1, 3.6, 2]
size = len(arr)
p = Pool(size)
print('size=', size)
for i in range(size):
p.apply_async(long_time_task, args=(arr[i],))
p.close()
p.join()
代码Python 3.6.3可用,只是测试性的,存在如这个链接所说的问题:
https://www.jianshu.com/p/4f526ea40df4
(1)无法处理负数;
(2)数据足够接近时存在误差;
(3)输入数据足够多时,并不能保证所有线程同时启动。这个算法的时间复杂度难道是O(n)?
参考资料:
https://www.jianshu.com/p/4f526ea40df4