【冒泡排序算法详解】Java/Go/Python/JS/C/Rust/Dart不同语言实现

【冒泡排序算法详解】Java/Go/Python/JS/C不同语言实现

 

说明

冒泡排序(Bubble Sort)又称为泡式排序,是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。即通过遍历待排序的数列,一次比较两个元素,根据大小调换位置,直到把最大的或最小的冒出来。

 

实现过程

  1. 先建立两个循环,外循环用于遍历整个数组,内循环遍历待排序的区间。
  2. 内循环每次都从第一项开始,将该项与待排序的后项逐个进行大小比较,再两两交换,将大的数字冒出来。
  3. 重复第二项,一直到数组遍历完。

 

示意图

 

 

 

性能分析

1
2
3
4
5
6
平均时间复杂度:O(N^2)
最佳时间复杂度:O(N)
最差时间复杂度:O(N^2)
空间复杂度:O(1)
排序方式:In-place
稳定性:稳定

  

代码

 

Java

 

复制代码
  // java冒泡排序标准版,更多版本请看源码文件
  void sort1(int arr[]) {
    int len = arr.length;
    for (int i = 0; i < len; i++) {
      for (int j = 0; j < len - i - 1; j++) {
        // 自左往右每两个进行比较,把大的交换到右侧
        // 逐轮冒出最大数,已经排好序的不要再比较
        if (arr[j] > arr[j + 1]) {
          int tmp = arr[j];
          arr[j] = arr[j + 1];
          arr[j + 1] = tmp;
        }
      }
    }
  }
复制代码

 

 

Python

 

复制代码
# python冒泡排序标准版,更多实现版本请查看源文件
def bubble_sort1(arr):
  print('bubble_sort1 from left to right:')
  length = len(arr)
  for i in range(length):
    for j in range(length - i - 1):
      # 自左往右每两个进行比较,把大的交换到右侧
      # 逐轮冒出最大数,已经排好序的不要再比较
      if (arr[j] > arr[j + 1]):
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
复制代码

 

 

Go

复制代码
 // go冒泡排序标准版,更多版本请查看源文件
func bubbleSort1(list []int) []int {
    var length = len(list)
    for i := 0; i < length; i++ {
        for j := 0; j < length-i-1; j++ {
            if list[j] > list[j+1] {
                var tmp = list[j+1]
                list[j+1] = list[j]
                list[j] = tmp
            }
        }
    }
    return list
}
复制代码

 

 

JS

复制代码
 // js冒泡排序标准版,更多实现版本详见源码文件
function bubbleSort1(arr) {
  const len = arr.length
  for (var i = 0; i < len; i++) {
    for (var j = 0; j < len - i - 1; j++) {
      // 自左往右每两个进行比较,把大的交换到右侧
      // 逐轮冒出最大数,已经排好序的不要再比较
      if (arr[j] > arr[j + 1]) {
        ;[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
      }
    }
  }
}
复制代码

 

 

TS

 

复制代码
  // ts冒泡排序标准版,其他版本请查看源码文件
  bubbleSort1(arr: Array<number>) {
    console.log('bubbleSort1 from left to right:')
    const len = arr.length
    for (let i = 0; i < len; i++) {
      for (let j = 0; j < len - i - 1; j++) {
        // 自左往右每两个进行比较,把大的交换到右侧
        // 逐轮冒出最大数,已经排好序的不要再比较
        if (arr[j] > arr[j + 1]) {
          [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
        }
      }
    }
  }
复制代码

 

 

C

 

复制代码
// c语言冒泡排序标准版,更多实现请看源码
void bubbleSort1(int arr[], int len)
{

  for (int i = 0; i < len; i++)
  {
    for (int j = 0; j < len - i - 1; j++)
    {
      // 自左往右每两个进行比较,把大的交换到右侧
      // 逐轮冒出最大数,已经排好序的不要再比较
      if (arr[j] > arr[j + 1])
      {
        int tmp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = tmp;
      }

    }
  }
}
复制代码

 

 

Rust

复制代码
// rust冒泡排序标准版,更多实现请看源码
fn bubble_sort1<T: Ord>(arr: &mut [T]) -> &mut [T] {
  let len = arr.len();

  for i in 0..len {
    for j in 0..len - i - 1 {
      if arr[j] > arr[j + 1] {
        // 可以直接使用swap
        arr.swap(j, j + 1);
      }
    }
  }

  return arr;
}
复制代码

 

 

Dart

复制代码
 // dart冒泡排序标准版,更多实现请看源码
bubbleSort1(List list) {
  var len = list.length;
  for (var i = 0; i < len; i++) {
    for (var j = 0; j < len - i - 1; j++) {
      if (list[j] > list[j + 1]) {
        var tmp = list[j + 1];
        list[j + 1] = list[j];
        list[j] = tmp;
      }
    }
  }
  return list;
}
复制代码

 

 

链接

冒泡排序算法源码:https://github.com/microwind/algorithms/tree/master/sorts/bubblesort

其他排序算法源码:https://github.com/microwind/algorithms

posted @   刀法如飞  阅读(125)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示