Add insertion sort notes.
parent
d744ce4ebc
commit
21517314a4
|
@ -15,7 +15,24 @@ tags:
|
||||||
| Worst Case ||
|
| Worst Case ||
|
||||||
| Average Case ||
|
| Average Case ||
|
||||||
| Memory ||
|
| Memory ||
|
||||||
| In place? ||
|
| In place ||
|
||||||
|
| Stable ||
|
||||||
|
|
||||||
|
Insertion sort works by advancing an index `i` through an array `A[1..n]` such that `A[1..i]` is put into sorted order. Consider precondition `Q` and postcondition `R`:
|
||||||
|
|
||||||
|
* `Q`: `i = 1`
|
||||||
|
* `R`: `i = n` and `A[1..n]` is in sorted order
|
||||||
|
|
||||||
|
Next establish loop invariant `P` and bounds function `t`:
|
||||||
|
|
||||||
|
* `P`: `1 \leq i \leq n` and `A[1..i]` is in sorted order
|
||||||
|
* `t`: the number of inversions of `A[1..i]`
|
||||||
|
|
||||||
|
## Analogy
|
||||||
|
|
||||||
|
Suppose you have a shuffled deck of playing cards face-down on a table. Start by grabbing a card from the deck with your left hand. For the remainder of the cards, use your right hand to transition the topmost card to the end of your left hand. If the newly placed card isn't in sorted order, move it one position closer to the start. Repeat until it's in sorted order.
|
||||||
|
|
||||||
|
If you repeat this process for every card in the deck, your left hand will eventually contain the entire deck in sorted order.
|
||||||
|
|
||||||
## References
|
## References
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue