什么是冒泡排序

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

下面主要讲解几种常用开发语言的冒泡排序的实现逻辑:

主流语言实现冒泡排序:

1.c语言之冒泡排序

#include <stdio.h>#define ARR_LEN 255 /*数组长度上限*/
#define elemType int /*元素类型*//* 冒泡排序 */
/* 1. 从当前元素起,向后依次比较每一对相邻元素,若逆序则交换 */
/* 2. 对所有元素均重复以上步骤,直至最后一个元素 */
/* elemType arr[]: 排序目标数组; int len: 元素个数 */
void bubbleSort (elemType arr[], int len) {elemType temp;int i, j;for (i=0; i<len-1; i++) /* 外循环为排序趟数,len个数进行len-1趟 */for (j=0; j<len-1-i; j++) { /* 内循环为每趟比较的次数,第i趟比较len-i次 */if (arr[j] > arr[j+1]) { /* 相邻元素比较,若逆序则交换(升序为左大于右,降序反之) */temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}
}int main (void) {elemType arr[ARR_LEN] = {3,5,1,-7,4,9,-6,8,10,4};int len = 10;int i;bubbleSort (arr, len);for (i=0; i<len; i++)printf ("%d\t", arr[i]);putchar ('\n');return 0;
}

2.c++之冒泡排序

#include <iostream>
using namespace std;
template<typename T>
//整数或浮点数皆可使用
void bubble_sort(T arr[], int len)
{int i, j;  T temp;for (i = 0; i < len - 1; i++)for (j = 0; j < len - 1 - i; j++)if (arr[j] > arr[j + 1]){temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}
}
int main()
{int arr[] = { 61, 17, 29, 22, 34, 60, 72, 21, 50, 1, 62 };int len = (int) sizeof(arr) / sizeof(*arr);bubble_sort(arr, len);for (int i = 0; i < len; i++)cout << arr[i] << ' ';cout << endl;float arrf[] = { 17.5, 19.1, 0.6, 1.9, 10.5, 12.4, 3.8, 19.7, 1.5, 25.4, 28.6, 4.4, 23.8, 5.4 };len = (int) sizeof(arrf) / sizeof(*arrf);bubble_sort(arrf, len);for (int i = 0; i < len; i++)cout << arrf[

3.c#之冒泡排序

namespace 数组排序
{class Program{static void Main(string[] args){int temp = 0;int[] arr = {23, 44, 66, 76, 98, 11, 3, 9, 7};#region该段与排序无关Console.WriteLine("排序前的数组:");foreach (int item in arr){Console.Write(item + "");}Console.WriteLine();#endregionfor (int i = 0; i < arr.Length - 1; i++){#region将大的数字移到数组的arr.Length-1-ifor (int j = 0; j < arr.Length - 1 - i; j++){if (arr[j] > arr[j + 1]){temp = arr[j + 1];arr[j + 1] = arr[j];arr[j] = temp;}}#endregion}Console.WriteLine("排序后的数组:");foreach (int item in arr){Console.Write(item+"");}Console.WriteLine();Console.ReadKey();}}
}

4.Python3之冒泡排序

def bubble_sort(nums):for i in range(len(nums) - 1):  # 这个循环负责设置冒泡排序进行的次数for j in range(len(nums) - i - 1):  # j为列表下标if nums[j] > nums[j + 1]:nums[j], nums[j + 1] = nums[j + 1], nums[j]return numsprint(bubble_sort([45, 32, 8, 33, 12, 22, 19, 97]))
# 输出:[8, 12, 19, 22, 32, 33, 45, 97]

5.Java之冒泡排序

public static void bubbleSort(int arr[]) {for(int i =0 ; i<arr.length-1 ; i++) { for(int j=0 ; j<arr.length-1-i ; j++) {  if(arr[j]>arr[j+1]) {int temp = arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}    }}

6.JavaScript之冒泡排序

function bubbleSort(arr) {var i = arr.length, j;var tempExchangVal;while (i > 0) {for (j = 0; j < i - 1; j++) {if (arr[j] > arr[j + 1]) {tempExchangVal = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tempExchangVal;}}i--;}return arr;
}var arr = [3, 2, 4, 9, 1, 5, 7, 6, 8];
var arrSorted = bubbleSort(arr);
console.log(arrSorted);
alert(arrSorted);

7.kotlin之冒泡排序

fun bubbleSort(array: Array<Int>) { val arrayLength = array.size    for (i in 0 until arrayLength) {        for (j in 0 until arrayLength - i - 1) {            if (array[j] > array[j + 1]) {                val temp = array[j]                array[j] = array[j + 1]                array[j + 1] = temp           }       }   }   // Prints result.
}

8.GO语音之冒泡排序

package mainimport "fmt"func bubble_sort(a []int){n := len(a)for i := 0; i < n - 1; i++ {for j := 0; j < n - 1 - i; j++ {if a[j] > a[j + 1]{a[j], a[j + 1] = a[j + 1], a[j]}}}}func print_arr(a []int){n := len(a)for i:= 0; i < n; i++ {fmt.Printf("%d ", a[i])}fmt.Printf("\n")
}func main(){a := []int{4, 3, 1, 6, 2, 0, -1}print_arr(a)bubble_sort(a)print_arr(a)
}

9.GO语言第二种方式

func BubbleSort(values []int) {flag := truevLen := len(values)for i := 0; i < vLen-1; i++ {flag = truefor j := 0; j < vLen-i-1; j++ {if values[j] > values[j+1] {values[j], values[j+1] = values[j+1], values[j]flag = falsecontinue}}if flag {break}}
}

总结:

算法原理其实很简单,就是每次对相邻的两个元素进行比较,若前者大于后者则进行交换,如此一趟下来最后一趟的就是最大元素,重复以上的步骤,除了已经确定的元素。

主流语言实现冒泡排序算法相关推荐

  1. c语言排序教学过程,C语言中冒泡排序算法教学设计

    排序是计算机科学中一项重要的技术,其应用范围广.使用频率高,因此对于排序算法的研究一直是计算机专家的重点.高校的程序设计类课程也将排序算法作为重难点进行教学. 1常见的几种排序算法 1.1算法的基本概 ...

  2. C语言实现冒泡排序算法

    冒泡排序算法步骤: 1.相邻的元素两两比较,大的放右边,小的放左边 2.第一轮比较完毕之后,最大值就已经确定,第二轮可以少循环一次,后面以此内推 3.如果数组中有n个数据,总共我们只要执行n-1轮代码 ...

  3. 【C语言】冒泡排序算法和冒泡排序的时间复杂度

    提示:冒泡排序算法是非常重要的算法,一定要熟练掌握.思路可以参考一位大佬博主的博客:帅地.介绍的十分详细,理解了之后,可以参考我的代码 ,是入门级别的,比较好懂.关于时间复杂度是数据结构的内容,没学过 ...

  4. C语言案例教学设计论文,【教学设计论文】C语言中冒泡排序算法教学设计(共2525字)...

    排序是计算机科学中一项重要的技术,其应用范围广.使用频率高,因此对于排序算法的研究一直是计算机专家的重点.高校的程序设计类课程也将排序算法作为重难点进行教学. 1常见的几种排序算法 1.1算法的基本概 ...

  5. 冒泡排序c语言子程序,C语言之冒泡排序算法

    一.搭建Zookeeper集群Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务--分布式同步(DistributedSynchronization) ...

  6. C语言——图解冒泡排序算法

    冒泡排序(Bubble Sort)又称为泡式排序,是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来.走访数列的工作是重复地进行直到没有再需要交换, ...

  7. 【C语言】两种方式实现冒泡排序算法

    题目要求 编写一个C语言程序,实现基本的冒泡排序算法. 算法 冒泡排序,用一句话来总结: 一组数中,相邻的两个数进行比较.交换,将最大(小)数交换至尾(首)部,即完成了一次冒泡排序 要想对N个数字进行 ...

  8. C语言试题八十八之实现选冒泡排序算法

    1.题目 C语言实现冒泡排序算法 2 .温馨提示 C语言试题汇总里可用于计算机二级C语言笔试.机试.研究生复试中C程序设计科目.帮助C语言学者打好程序基础.C语言基础,锻炼您的逻辑思维和解决问题的能力 ...

  9. c语言冒泡排序法程序填空_【C语言】两种方式实现冒泡排序算法

    题目要求 编写一个C语言程序,实现基本的冒泡排序算法. 算法 冒泡排序,用一句话来总结: 一组数中,相邻的两个数进行比较.交换,将最大(小)数交换至尾(首)部,即完成了一次冒泡排序 要想对N个数字进行 ...

最新文章

  1. 干货 | 基于特征的图像配准用于缺陷检测
  2. 50 jQuery拷贝对象与多库共存
  3. 点云配准 PointNet + Concat + FC
  4. linux 创建wifi 热点_Linux创建无线WIFI热点 2.4g/5g
  5. Canvas createImageData
  6. centos7安装oracle12c 一
  7. a as as big rat_超好玩!12句英语绕口令,你能一口气读完几句?
  8. 【数据库】第一章 数据库的分类、SQL、数据库、表和表记录的常用操作
  9. 最全数据指标体系集合!覆盖9个行业4个业务场景,全是干货
  10. Linux下重修烧录(修改)Mac地址---Eeupdate for Intel
  11. 认识ManualResetEvent
  12. CTFHub技能书解题笔记-信息泄露-备份文件下载-网站源码
  13. 【软件工程师之路一】咸鱼翻身之自学软件开发
  14. 惠普计算机工作站,HP 笔记本计算机和移动工作站电池安全召回和更换计划
  15. Zookeeper + Centos7 详细安装教程
  16. 跪了!P9透露2021年阿里巴巴Java面试权威指南(泰山版)
  17. Linux虚拟机安装及Docker常用操作
  18. 《保护我们的数字遗产:DNA数据存储》白皮书发布
  19. K3s+Rainbond默认集群添加server节点
  20. 原生JS实现淡出淡入效果

热门文章

  1. cortex-m 2017 whitepaper (English and Chinese)
  2. 与AI人才有关的讨论
  3. 转 zookeeper启动为什么占用8080端口,修改哪个配置文件可以改变端口?
  4. 杀毒软件杀毒后桌面图标为什么都成打开方式了
  5. 京东联合vivo针对vivo X Note推出先行者计划
  6. 6999元!红魔6S Pro推出战地迷彩主题限定套装:11月1日正式开售
  7. 小米11系列备货量多,得益于骁龙888首发独占期
  8. 小米10超大杯本月亮相稳了:无线快充纪录将再次刷新
  9. 价值12万汽车网上售价1万?老哥拍下后4S店不认账:标错价了
  10. 回望iQOO一周年:子品牌战略的成功之路