pub fn cycle_sort(list: &[i32]) -> Result<Vec<i32>,String> {
if list.is_empty() {
return Err("Cannot sort an empty array!".to_string());
}
let length = list.len();
let mut my_list = list.to_vec();
for start in 0..length-1 {
let mut item = my_list[start];
let mut position = start;
for i in start+1..length {
if my_list[i] < item {
position += 1;
}
}
if position == start {
continue;
}
while item == my_list[position] {
position += 1;
}
let old = my_list[position];
my_list[position] = item;
item = old;
while position != start {
position = start;
for i in start+1..length {
if my_list[i] < item {
position+=1;
}
}
while item == my_list[position] {
position+=1;
}
let old = my_list[position];
my_list[position] = item;
item = old;
}
}
Ok(my_list)
}