我试图弄清楚如何实现一种类似于冒泡排序但在某些方面有所不同的排序方法。
伪代码将是这样的:
- 获取列表并获取列表中的第一个元素
- 如果它旁边的元素更小,则交换元素
- 否则将元素标记为已移动并重复直到所有元素都被标记
以下是我对实现这个问题的想法:
sortElement [] elm= []
sortElement [x] elm= [x]
sortElement lis@(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' lis@(x:xs) lis1@(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].