Thanks to visit codestin.com
Credit goes to docs.rs

sorting_algorithm/
comb_sort.rs

1/// Sorts a data set using Comb Sort
2///
3/// Average time complexity: O(n logn)
4///
5/// # Examples
6///
7/// ```
8/// use sorting_algorithm::comb_sort;
9///
10/// fn main() {
11///     let mut data = [3, 1, 2, 5, 4];
12///     
13///     comb_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    if data.len() <= 1 {
20        return;
21    }
22
23    let mut gap = data.len();
24    let mut swapped = true;
25
26    while gap != 1 || swapped {
27        gap = get_next_gap(gap);
28
29        swapped = false;
30
31        for i in 0..data.len() - gap {
32            if data[i] > data[i + gap] {
33                data.swap(i, i + gap);
34                swapped = true;
35            }
36        }
37    }
38}
39
40fn get_next_gap(gap: usize) -> usize {
41    let gap = (gap * 10) / 13;
42
43    if gap < 1 {
44        return 1;
45    }
46
47    gap
48}