Rust實(shí)現(xiàn)冒泡排序算法示例詳解
引言
rust因其安全性和易用性,未來將取代C與C++。那么rust學(xué)習(xí)起來困難嗎?其實(shí)很簡(jiǎn)單,請(qǐng)看一下代碼。
冒泡排序升序
/** * 冒泡排序升序,將最大的冒泡到最后 */ fn bubble_sort1<T: Ord>(arr: &mut [T]) -> &mut [T] { let len = arr.len(); println!("array size is {:?}", arr.len()); for i in 0..len { println!("i:{}", i); for j in 0..len - i - 1 { println!("i=:{}, j=:{}", i, j); if arr[j] > arr[j + 1] { // 可以直接使用swap arr.swap(j, j + 1); } } } // println!("array is sorted {:?}", arr); return arr; }
冒泡排序降序
/** * 冒泡排序降序,將最小的冒泡到最后。 * 且增加是否交換的標(biāo)志,針對(duì)已排序做優(yōu)化。 */ fn bubble_sort2<T: Ord>(arr: &mut [T]) -> &mut [T] { let len = arr.len(); let mut flag = true; let mut i = 0; while i < len && flag == true { flag = false; println!("i:{}", i); for j in 0..len - i - 1 { // 當(dāng)前項(xiàng)跟后一項(xiàng)進(jìn)行比較,如果需要交換 // 當(dāng)沒有任何一項(xiàng)需要交換時(shí)則終止循環(huán) println!("i=:{}, j=:{}", i, j); if arr[j] < arr[j + 1] { flag = true; arr.swap(j, j + 1); } } i = i + 1; } return arr; } fn main() { println!("bubbleSort:"); let mut data1 = [2, -1, 10, 5, 8, 11]; println!("sort1 before: {:?}", data1); bubble_sort1(&mut data1); println!("sort1 after: {:?}", data1); let mut data2 = [2, -1, 10, 5, 8, 11]; println!("sort2 before: {:?}", data2); bubble_sort2(&mut data2); println!("sort2 after: {:?}", data2); }
結(jié)果
/*
jarry@jarrys-MacBook-Pro rust % rustc -V
rustc 1.51.0 (2fd73fabe)
jarry@jarrys-MacBook-Pro bubblesort % rustc ./bubble_sort.rs
jarry@jarrys-MacBook-Pro bubblesort % ./bubble_sort
bubbleSort:
sort1 before: [2, -1, 10, 5, 8, 11]
array size is 6
i:0
i=:0, j=:0
i=:0, j=:1
i=:0, j=:2
i=:0, j=:3
i=:0, j=:4
i:1
i=:1, j=:0
i=:1, j=:1
i=:1, j=:2
i=:1, j=:3
i:2
i=:2, j=:0
i=:2, j=:1
i=:2, j=:2
i:3
i=:3, j=:0
i=:3, j=:1
i:4
i=:4, j=:0
i:5
sort1 after: [-1, 2, 5, 8, 10, 11]
sort2 before: [2, -1, 10, 5, 8, 11]
i:0
i=:0, j=:0
i=:0, j=:1
i=:0, j=:2
i=:0, j=:3
i=:0, j=:4
i:1
i=:1, j=:0
i=:1, j=:1
i=:1, j=:2
i=:1, j=:3
i:2
i=:2, j=:0
i=:2, j=:1
i=:2, j=:2
i:3
i=:3, j=:0
i=:3, j=:1
i:4
i=:4, j=:0
i:5
sort2 after: [11, 10, 8, 5, 2, -1]
*/
更多語言冒泡算法源碼,請(qǐng)?jiān)L問
https://github.com/microwind/algorithms
希望大家以后多多支持腳本之家!
相關(guān)文章
Windows系統(tǒng)下安裝Rust環(huán)境超詳細(xì)教程
這篇文章主要介紹了如何在Windows系統(tǒng)上安裝mingw64和Rust,mingw64是一個(gè)輕便的C語言編譯環(huán)境,可以替代Rust默認(rèn)使用的Visual?Studio,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2025-02-02Rust?實(shí)現(xiàn)?async/await的詳細(xì)代碼
異步編程在 Rust 中的地位非常高,很多 crate 尤其是多IO操作的都使用了 async/await,這篇文章主要介紹了Rust?如何實(shí)現(xiàn)?async/await,需要的朋友可以參考下2022-09-09前端基于Rust實(shí)現(xiàn)的Wasm進(jìn)行圖片壓縮的技術(shù)文檔(實(shí)現(xiàn)方案)
在現(xiàn)代Web開發(fā)中,利用Rust編寫的圖片壓縮代碼可以編譯成WebAssembly(Wasm)模塊,Rust的內(nèi)存安全特性和Wasm的跨平臺(tái)能力,使得這種方案既高效又安全,對(duì)Rust?Wasm圖片壓縮實(shí)現(xiàn)方案感興趣的朋友一起看看吧2024-09-09Rust?語言中符號(hào)?::?的使用場(chǎng)景解析
Rust?是一種強(qiáng)調(diào)安全性和速度的系統(tǒng)編程語言,這篇文章主要介紹了Rust?語言中符號(hào)?::?的使用場(chǎng)景,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03