単一リンクリストがあり、メモリの制限のために一定のスペースで並べ替える必要があります(つまり、リスト内のアイテムの数に比例する余分なスペースを使用しないでください)。
リンクリストの構造は次のとおりです。
head.item
=並べ替えるペイロード; とhead.next
=次のアイテム。
別のリストを作成する場合の一定のスペース割引ソリューションの要件は、その場で行う必要があります。
どうやってやるの?
単一リンクリストがあり、メモリの制限のために一定のスペースで並べ替える必要があります(つまり、リスト内のアイテムの数に比例する余分なスペースを使用しないでください)。
リンクリストの構造は次のとおりです。
head.item
=並べ替えるペイロード; とhead.next
=次のアイテム。別のリストを作成する場合の一定のスペース割引ソリューションの要件は、その場で行う必要があります。
どうやってやるの?
リンクされたリストを定数空間でソートするのは簡単です。ポインターを調整するだけです。これを行う最も簡単な方法は、隣接する要素のみを交換する並べ替えアルゴリズムを使用することです。効率性を要求していないという理由だけで、バブルソートを提供します。
# Enter loop only if there are elements in list.
swapped = (head <> null)
while swapped:
# Only continue loop if a swap is made.
swapped = false
# Maintain pointers.
curr = head
next = curr.next
prev = null
# Cannot swap last element with its next.
while next <> null:
# Swap if items in wrong order.
if curr.item > next.item:
# Notify loop to do one more pass.
swapped = true
# Swap elements (swapping head is special case).
if curr == head:
head = next
temp = next.next
next.next = curr
curr.next = temp
curr = head
else:
prev.next = curr.next
curr.next = next.next
next.next = curr
curr = next
endif
endif
# Move to next element.
prev = curr
curr = curr.next
next = curr.next
endwhile
endwhile
いくつかの方法:
O(n)
、非常に高速である必要があるためです**予想される実行時の複雑さはO(n*n!)
リンクされたリストのインプレース ソートについては、マージ ソートをお勧めします。安定しており、NlgN 時間で実行されます。