1.バブルソートを学ぶ
Baiduのチュートリアル、例:http ://c.biancheng.net/view/6506.html
これまでのところ、バブルソートと呼ばれるものを知っています。
2.新しい貨物プロジェクトを作成します
コマンドライン実行:
cargo init
効果:
この時点で、コードを記述できる場所ができました。
3、機能:要素を交換する
パラメータ:ターゲット配列、インデックスA、インデックスB。
&は、iを呼び出すと所有権が失われないことを意味します。
mutは、この配列を変更できることを意味します。
usizeは、符号なし整数、配列のインデックスがこのタイプであることを意味します。
fn change(arr: &mut Vec<i32>, a: usize, b: usize) {
let temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
テスト中:
fn main() {
let mut arr = vec![1, 2];
change(&mut arr, 0, 1);
for i in arr {
println!("{}", i)
}
}
効果:成功!
4.バブルソート
最初にバブリングを行います。
fn bubble(arr: &mut Vec<i32>) {
for i in 1..arr.len() {
if arr[i].gt(&arr[i - 1]) {
change(arr, i, i - 1);
}
}
}
テストコードを書く:
fn main() {
let mut arr = vec![1, 3, 2, 6, 5, 8, 3];
bubble(&mut arr);
for i in arr {
print!("{}", i)
}
}
効果:1が最後に配置されます。
終わりを除外しながら、このトラバーサルを繰り返します。
fn bubble(arr: &mut Vec<i32>) {
for j in 0..arr.len() {
for i in 1..arr.len() - j {
if arr[i].gt(&arr[i - 1]) {
change(arr, i, i - 1);
}
}
}
}
効果:成功!
5.拡張子:昇順降順
もう1つのパラメータ: "asc"、 "desc"
fn bubble(arr: &mut Vec<i32>, sort: &str) {
for j in 0..arr.len() {
for i in 1..arr.len() - j {
if sort.eq("asc") {
if arr[i].lt(&arr[i - 1]) {
change(arr, i, i - 1);
}
} else {
if arr[i].gt(&arr[i - 1]) {
change(arr, i, i - 1);
}
}
}
}
}
6.すべてのコード
fn main() {
let mut arr = vec![1, 3, 2, 6, 5, 8, 3];
bubble(&mut arr, "desc");
for i in arr {
print!("{}", i)
}
print!("\n");
let mut arr2 = vec![1, 3, 2, 6, 5, 8, 3];
bubble(&mut arr2, "asc");
for i in arr2 {
print!("{}", i)
}
}
fn bubble(arr: &mut Vec<i32>, sort: &str) {
for j in 0..arr.len() {
for i in 1..arr.len() - j {
if sort.eq("asc") {
if arr[i].lt(&arr[i - 1]) {
change(arr, i, i - 1);
}
} else {
if arr[i].gt(&arr[i - 1]) {
change(arr, i, i - 1);
}
}
}
}
}
fn change(arr: &mut Vec<i32>, a: usize, b: usize) {
let temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}