This implementation is pretty much straight out of the book and we’re required to use the Copy
trait as a result, limiting T
a great deal.
fn insertion_sort_with_copy<T: PartialOrd + Copy>(a: &mut [T]) {
for j in 1..a.len() {
let key = a[j];
let mut i = j;
while i > 0 && a[i - 1] > key {
a[i] = a[i - 1];
i -= 1;
}
a[i] = key;
}
}
By changing things around a little and using swap
, we can remove the need for the Copy
trait.
fn insertion_sort<T: PartialOrd>(a: &mut [T]) {
for j in 1..a.len() {
let mut i = j;
while i > 0 && a[i - 1] > a[i] {
a.swap(i - 1, i);
i -= 1;
}
}
}
The end!
Thanks for reading! Please feel free to send me an email to talk more about this (or anything else for that matter).