バブルソートに似ているが、いくつかの点で異なるソート方法を実装する方法を理解しようとしています。
擬似コードは次のようになります。
- リストを取得し、リストの最初の要素を取得します
- その隣の要素が小さい場合は、要素を交換します
- それ以外の場合、要素を移動済みとしてマークし、すべての要素がマークされるまで繰り返します
この問題の実装について私が考えた方法は次のとおりです。
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
次のようなものを取得したい場合、1回の反復後に完全にソートされたリストを取得します。
[4,2,7,1] => iterating 4 [2,4,7,1], after iterating all the elements [2,4,1,7].