Rust实现冒泡排序算法示例详解

 更新时间:2023年08月15日 10:36:05   作者:刀法如飞  
这篇文章主要为大家介绍了Rust实现冒泡排序算法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

rust因其安全性和易用性,未来将取代C与C++。那么rust学习起来困难吗?其实很简单,请看一下代码。

冒泡排序升序

/**
 * 冒泡排序升序,将最大的冒泡到最后
 */
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;
}

冒泡排序降序

/**
 * 冒泡排序降序,将最小的冒泡到最后。
 * 且增加是否交换的标志,针对已排序做优化。
 */
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 {
      // 当前项跟后一项进行比较,如果需要交换
      // 当没有任何一项需要交换时则终止循环
      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);
}

结果

/*
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]
*/

更多语言冒泡算法源码,请访问

https://github.com/microwind/algorithms

希望大家以后多多支持脚本之家!

相关文章

  • 如何使用rust实现简单的单链表

    如何使用rust实现简单的单链表

    实现单链表在别的语言里面可能是一件简单的事情,单对于Rust来说,绝对不简单,下面这篇文章主要给大家介绍了关于如何使用rust实现简单的单链表的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • 解析rust中的struct

    解析rust中的struct

    自定义的数据类型,为相关联的值命名,打包成有意义的组合,类似python的dict,但是赋值的时候可以不按顺序,本文给大家介绍下rust中的struct知识,感兴趣的朋友一起看看吧
    2022-10-10
  • Rust 所有权机制原理深入剖析

    Rust 所有权机制原理深入剖析

    这篇文章主要为大家介绍了Rust 所有权机制原理深入剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Rust处理错误的实现方法

    Rust处理错误的实现方法

    程序在运行的过程中,总是会不可避免地产生错误,而如何优雅地解决错误,也是语言的设计哲学之一。本文就来和大家来了Rust是如何处理错误的,感兴趣的可以了解一下
    2023-03-03
  • Rust 中 Mutex 的基本用法

    Rust 中 Mutex 的基本用法

    Rust 标准库中的 Mutex 结构体位于 std::sync::Mutex 中,它提供了线程安全的数据访问,Mutex 保证了在同一时间只有一个线程可以访问被锁定的数据,这篇文章主要介绍了Rust 中 Mutex 的基本用法,需要的朋友可以参考下
    2024-05-05
  • Rust指南之泛型与特性详解

    Rust指南之泛型与特性详解

    泛型机制是编程语言用于表达类型抽象的机制,一般用于功能确定、数据类型待定的类,如链表、映射表等,这篇文章主要介绍了Rust指南泛型与特性,需要的朋友可以参考下
    2022-10-10
  • 利用Rust编写一个简单的字符串时钟

    利用Rust编写一个简单的字符串时钟

    这篇文章主要为大家详细介绍了一个用rust写的一个简单的练手的demo,一个字符串时钟,在终端用字符串方式显示当前时间,感兴趣的小伙伴可以了解一下
    2022-12-12
  • Rust 语言的全链路追踪库 tracing使用方法

    Rust 语言的全链路追踪库 tracing使用方法

    这篇文章主要介绍了Rust 语言的全链路追踪库 tracing,接下来就以 tracing 为例,介绍一下trace 的核心概念以及使用方法,需要的朋友可以参考下
    2022-12-12
  • Rust 文档注释功能示例代码

    Rust 文档注释功能示例代码

    Rust的文档注释使用特定的格式,以便通过 rustdoc工具生成 API 文档,本文给大家介绍Rust 文档注释功能,感兴趣的朋友跟随小编一起看看吧
    2024-04-04
  • 详解Rust中的workspace

    详解Rust中的workspace

    这篇文章主要向大家介绍Rust中的workspace,主要内容包括基础应用、实用技巧、原理机制等方面,这个概念在Rust中是通用的,只不过maven换成了cargo,而模块变成了crate,下面跟着小编通过一个例子给大家介绍下
    2022-03-03

最新评论