我想弄清楚如何實現類似冒泡排序但在某些方面有所不同的排序方法。實現類似於冒泡排序的排序方法
的僞代碼會是這樣的:
- 獲取列表,並採取第一個元素列表
- 如果該元素旁邊是小然後交換元素
- 其他標記元素爲移動和重複,直到所有的元素都標
這裏是我想過實施這個問題:
sortElement [] elm= []
sortElement [x] elm= [x]
sortElement [email protected](x:y:xs) elm =
--first if is to find the element in the list that i want to move
if elm /=x
then x:sortElement(y:xs) elm
else if x > y then y:sortElement(x:xs) elm
else lis
stackBubble lis = stackBubble' lis lis
stackBubble' [] [] = []
stackBubble' [x] [] = [x]
stackBubble' [] [x] = []
stackBubble' [email protected](x:xs) [email protected](x1:xs1) = do
sortElement(stackBubble' lis xs1) x1
我正的錯誤是在功能stackBubble」
非詳盡模式
如果我不喜歡其他地方建議:
sortElement(x:stackBubble' xs xs1) x1
我得到一個完全分類列表後一次迭代時,我想得到這樣的事情:
[4,2,7,1] => iterating 4 [2,4,7,1], after iterating all the elements [2,4,1,7].
好吧,這是一樣的說:泡'李@(x:y:xs)=如果x> y然後y:泡'(x:xs)其他x:泡(y:xs)。我已經嘗試過這種猜測,因爲在測試之前我沒有在控制檯中重新加載。但是,謝謝你,我想我以後的做法有點矯枉過正。 –
是的。哦,順便說一句,沒有必要做'lis @(x:y:xs)',只要括號中的部分就足夠了。否則,您將整個列表分配給'lis'而不用它。如果您使用-Wall – tazjin
運行它,GHC可以警告您這些事情。感謝您使用-Wall命令,現在就使用它。謝謝你的幫助,這是無價的。 –