Js中的位運算和許可權設計
阿新 • • 發佈:2020-12-04
實現“睡眠排序”(Python)
演算法思想:
3 | 1 | 6 | 4 | 2 | 5 | 4 | 1 |
---|
睡眠排序的演算法思想非常簡單。例如,對於上述列表中的數字如何排序?首先,我們假設,讓列表裡面的數字全去一個房間“睡覺”。然後,列表第一個元素“3”,我們讓它3秒後走出房間。第二個元素“1”,讓它1秒後走出房間。第三個元素“6”,讓它6秒後走出房間。。。。。。以此類推,當所有數字都走出房間後。它們就成為了下方列表,從1到6遞增的有序狀態。
1 | 1 | 2 | 3 | 4 | 4 | 5 | 6 |
---|
如何模擬數字“睡覺”這個過程呢?當然是用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,這個演算法可能就“睡過頭”了(時間開銷太大)。其次,若要對負數進行排序,又該怎麼辦呢?
解決思路是:將要排序的資料,進行歸一化處理後再睡眠排序。有興趣的朋友可自行百度。