Content deleted Content added
Library sort is neither adaptive nor stable. Changed best-case performance bound and explanation of the features. Also, the total cost of rebalancing is linear. Fixed that and added the logarithmic time for the insertion step. Finally, I can't see almost any similarity with skip lists, so I removed that sentence, which was only a subjective opinion. |
m →Pseudocode: : remove trailing ")" |
||
(11 intermediate revisions by 7 users not shown) | |||
Line 1:
{{Short description|Sorting algorithm}}
{{refimprove|date=October 2017}}
{{Infobox Algorithm
Line 10 ⟶ 11:
|optimal=?
}}
'''Library sort'''
<blockquote>Suppose a librarian were to store
The algorithm was proposed by [[Michael A. Bender]], [[Martín Farach-Colton]], and [[Miguel Mosteiro]] in 2004<ref>{{cite
Like the insertion sort it is based on, library sort is a [[comparison sort
Compared to basic insertion sort, the drawback of library sort is that it requires extra space for the gaps. The amount and distribution of that space would
Another drawback is that it cannot be run as an [[online algorithm]], because it is not possible to randomly shuffle the input. If used without this shuffling, it could easily degenerate into quadratic behaviour.
One weakness of [[insertion sort]] is that it may require a high number of swap operations and be costly if memory write is expensive. Library sort may improve that somewhat in the insertion step, as fewer elements need to move to make room, but is also adding an extra cost in the rebalancing step. In addition, locality of reference will be poor compared to [[mergesort]] as each insertion from a random data set may access memory that is no longer in cache, especially with large data sets.▼
▲One weakness of [[insertion sort]] is that it may require a high number of swap operations and be costly if memory write is expensive. Library sort may improve that somewhat in the insertion step, as fewer elements need to move to make room, but
==Implementation==
Line 36 ⟶ 39:
'''procedure''' rebalance(A, begin, end) '''is'''
r ← end
w ← end
'''while''' r ≥ begin '''do'''
A[w+1] ← gap▼
A[w] ← A[r]
r ← r − 1
w ← w − 2
Line 48 ⟶ 51:
S ← new array of n gaps
'''for''' i ← 1 to floor(log2(n
'''for'''
ins ← binarysearch(A[j], S, 2^i)
insert A[j] at S[ins]
Line 63 ⟶ 67:
{{sorting}}
[[Category:Comparison sorts]]
[[Category:Stable sorts]]
|