28 lines
851 B
Rust
28 lines
851 B
Rust
#[no_mangle]
|
|
fn get_reversals_to_sort(arr: &[i32]) -> Vec<usize> {
|
|
let mut intermediate: Vec<i32> = arr.into();
|
|
let mut ret: Vec<usize> = Vec::new();
|
|
|
|
for i in (2..=intermediate.len()).rev() {
|
|
let max = intermediate[0..i].iter().max().unwrap();
|
|
let found = intermediate[0..i].iter().position(|e| e == max).unwrap();
|
|
|
|
let first_swap = found + 1;
|
|
let second_swap = i;
|
|
|
|
if first_swap != second_swap {
|
|
if first_swap > 1 {
|
|
ret.push(first_swap);
|
|
intermediate[0..first_swap].reverse();
|
|
}
|
|
ret.push(second_swap);
|
|
intermediate[0..second_swap].reverse();
|
|
}
|
|
}
|
|
ret
|
|
}
|
|
pub fn main() {
|
|
let vals = include!("inp.txt"); //[12, 13, 11, 14];
|
|
let show = get_reversals_to_sort(&vals);
|
|
//println!("{:?}", show);
|
|
}
|