Rust-バブルソートの実装

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;
}

おすすめ

転載: blog.csdn.net/qq_37284843/article/details/123881278