1. 程式人生 > 其它 >UEditor元件封裝,重寫上傳檔案功能,重寫全屏樣式(Vue版本)

UEditor元件封裝,重寫上傳檔案功能,重寫全屏樣式(Vue版本)

技術標籤:演算法python

實現“睡眠排序”(Python)


演算法思想:

31642541

睡眠排序的演算法思想非常簡單。例如,對於上述列表中的數字如何排序?首先,我們假設,讓列表裡面的數字全去一個房間“睡覺”。然後,列表第一個元素“3”,我們讓它3秒後走出房間。第二個元素“1”,讓它1秒後走出房間。第三個元素“6”,讓它6秒後走出房間。。。。。。以此類推,當所有數字都走出房間後。它們就成為了下方列表,從1到6遞增的有序狀態。

11234456

如何模擬數字“睡覺”這個過程呢?當然是用sleep()函式,Python匯入time這個模組就可以使用它了。
如何讓數字同時“進入房間”呢?答案是使用執行緒池加map()函式。簡單說一下map()函式用法。map(function, list, …),它接收一個function(函式) 和一個 list,並通過把function依次作用在 list 的每個元素上,得到一個新的 list 並返回。

不說了,下面上程式碼:

import time
from multiprocessing.dummy import Pool

def my_sort(int):
    time.sleep(int/1000)
    list2.append(int)

list1=[1,3,2,2,3,1,2,3]
pool =Pool(len(list1))   # 根據需排序的列表長度,建立執行緒池內執行緒個數
list2=[]  # 用來存放排好序後的元素
pool.map(my_sort,list1)
print(list2)

執行截圖:

在這裡插入圖片描述

補充:

首先,若元素太大,例如1000000,這個演算法可能就“睡過頭”了(時間開銷太大)。其次,若要對負數進行排序,又該怎麼辦呢?

解決思路是:將要排序的資料,進行歸一化處理後再睡眠排序。有興趣的朋友可自行百度。