W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
解決問題的方式有多種,但是你需要在程序運(yùn)行時(shí)選擇(或是轉(zhuǎn)換)這些方法。
在策略對象(Strategy objects)中封裝你的算法。
例如,給定一個(gè)未排序的列表,我們可以在不同情況下改變排序算法。
StringSorter = (algorithm) ->
sort: (list) -> algorithm list
bubbleSort = (list) ->
anySwaps = false
swapPass = ->
for r in [0..list.length-2]
if list[r] > list[r+1]
anySwaps = true
[list[r], list[r+1]] = [list[r+1], list[r]]
swapPass()
while anySwaps
anySwaps = false
swapPass()
list
reverseBubbleSort = (list) ->
anySwaps = false
swapPass = ->
for r in [list.length-1..1]
if list[r] < list[r-1]
anySwaps = true
[list[r], list[r-1]] = [list[r-1], list[r]]
swapPass()
while anySwaps
anySwaps = false
swapPass()
list
sorter = new StringSorter bubbleSort
unsortedList = ['e', 'b', 'd', 'c', 'x', 'a']
sorter.sort unsortedList
# => ['a', 'b', 'c', 'd', 'e', 'x']
unsortedList.push 'w'
# => ['a', 'b', 'c', 'd', 'e', 'x', 'w']
sorter.algorithm = reverseBubbleSort
sorter.sort unsortedList
# => ['a', 'b', 'c', 'd', 'e', 'w', 'x']
“沒有作戰(zhàn)計(jì)劃在第一次接觸敵人時(shí)便能存活下來。” 用戶如是,但是我們可以運(yùn)用從變化的情況中獲得的知識來做出適應(yīng)改變。在示例末尾,例如,數(shù)組中的最新項(xiàng)是亂序排列的,知道了這個(gè)細(xì)節(jié),我們便可以通過切換算法來加速排序,只要簡單地重賦值就可以了。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: