~略~算法
數列從頭至尾遍歷過程當中未發生「交換」事件spa
fn do_exchange(list: &mut Vec<usize>,index:usize) { let temp = list[index+1]; list[index+1] = list[index]; list[index] = temp; } fn next(list: &mut Vec<usize>,index:usize,is_stable: bool ) { let length = list.len(); let flag = list[index] < list[index+1];//is need changed if !flag{ do_exchange(list,index); } let flag = flag && is_stable; if index + 2 < length{ next(list,index+1,flag); }else if flag { return; }else { next(list,0,true) } } fn sort(list: &mut Vec<usize>) { next(list,0,true); } fn main() { let mut list : Vec<usize> = vec![2,3,1,4,6,8,0,5]; sort(&mut list); println!("{:?}",list); }
添加一個標識符flag,每次遍歷初始化爲true,當發生交換時置爲true。每次遍歷結束時檢測是否發生過交換,若是是開始下一輪遍歷。code
rust編寫的簡短程序不適合使用cargo創建project,這時就須要直接使用rustc進行編譯。假設上述代碼保存爲bubblesort.rs,則我使用的編譯命令爲排序
rustc --cfg bubblesort bubblesort.rs事件