Sorting algorithms/Gnome sort: Difference between revisions
Content added Content deleted
(typo) |
(Added Rust solution) |
||
Line 2,633: | Line 2,633: | ||
ary.gnomesort! |
ary.gnomesort! |
||
# => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]</lang> |
# => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]</lang> |
||
=={{header|Rust}}== |
|||
<lang rust>fn gnome_sort<T: Ord>(a: &mut [T]) { |
|||
let len = a.len(); |
|||
let mut i : usize = 1; |
|||
let mut j : usize = 2; |
|||
while i < len { |
|||
if a[i - 1] <= a[i] { |
|||
// for descending sort, use >= for comparison |
|||
i = j; |
|||
j += 1; |
|||
} |
|||
else { |
|||
a.swap(i - 1, i); |
|||
i -= 1; |
|||
if i == 0 { |
|||
i = j; |
|||
j += 1; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
fn main() { |
|||
let mut v = vec![10, 8, 4, 3, 1, 9, 0, 2, 7, 5, 6]; |
|||
println!("before: {:?}", v); |
|||
gnome_sort(&mut v); |
|||
println!("after: {:?}", v); |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
before: [10, 8, 4, 3, 1, 9, 0, 2, 7, 5, 6] |
|||
after: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
|||
</pre> |
|||
=={{header|Scala}}== |
=={{header|Scala}}== |