sorting_algorithm/shell_sort.rs
1/// Sorts a data set using Shell Sort
2///
3/// Average time complexity: O(n<sup>2</sup>)
4///
5/// # Examples
6///
7/// ```
8/// use sorting_algorithm::shell_sort;
9///
10/// fn main() {
11/// let mut data = [3, 1, 2, 5, 4];
12///
13/// shell_sort::sort(&mut data);
14///
15/// assert_eq!(data, [1, 2, 3, 4, 5]);
16/// }
17/// ```
18pub fn sort<T: Ord>(data: &mut [T]) {
19 let n = data.len();
20
21 let mut gap = n / 2;
22
23 while gap > 0 {
24 for i in gap..n {
25 let mut j = i;
26
27 while j >= gap && data[j] < data[j - gap] {
28 data.swap(j, j - gap);
29 j -= gap;
30 }
31 }
32
33 gap /= 2;
34 }
35}