排序算法介绍(二)冒泡排序

0. 简介       

        冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。


1. 冒泡排序实现

冒泡排序的基本思想:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

冒泡排序过程演示:

7ca27b21942d426485838c8499aecc0e.gif


2. 冒泡排序时间复杂度和空间复杂度分析

冒泡排序的时间复杂度和空间复杂度如下:

  1. 时间复杂度:

    • 最坏情况(逆序):比较和交换次数均为 n*(n-1)/2,所以时间复杂度是 O(n^2)。
    • 最好情况(已排序):只需要进行 n-1 次比较,所以时间复杂度是 O(n)。
    • 平均情况:时间复杂度是 O(n^2)。
  2. 空间复杂度:

    • 冒泡排序是原地排序,只需要一个额外空间用于临时交换元素,所以空间复杂度是 O(1)。

冒泡排序的平均和最坏情况时间复杂度都是 O(n^2),空间复杂度是 O(1)。


3. 冒泡排序C语言代码

C代码:

#include <stdio.h>  void bubbleSort(int arr[], int n) {  int i, j, temp;  for (i = 0; i < n-1; i++) {       // 外层循环控制排序趟数  for (j = 0; j < n-i-1; j++) {  // 内层循环控制每一趟排序多少次  if (arr[j] > arr[j+1]) {   // 如果前一个元素大于后一个元素,交换它们的位置  temp = arr[j];  arr[j] = arr[j+1];  arr[j+1] = temp;  }  }  }  
}  int main() {  int arr[] = {64, 34, 25, 12, 22, 11, 90};  // 待排序的数组  int n = sizeof(arr)/sizeof(arr[0]);      // 数组的长度  bubbleSort(arr, n);                      // 对数组进行冒泡排序  printf("Sorted array: \n");  for (int i=0; i < n; i++) {              // 输出排序后的数组  printf("%d ", arr[i]);  }  printf("\n");  return 0;  
}

代码解释:

  • bubbleSort 函数接收一个整数数组和它的长度作为参数。
  • 外层循环负责保证排序的趟数。例如,有7个数字,就需要排序6趟。
  • 内层循环负责每一趟中的具体比较和交换操作。每一次内层循环都会确保当前未排序部分的最大值移到正确的位置。
  • 当内层循环结束后,最大的数已经被放到了正确的位置,所以外层循环的每次迭代都会减少内层循环的次数。

4. 运行结果

代码运行结果:

7d2c7b64e78143f2ae235cbe10fcf89e.png

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/255122.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ROS小练习——话题订阅

目录 一、话题与消息获取 二、代码编写 1、C 2、python 三、编译运行 一、话题与消息获取 rostopic list rostopic type /turtle1/pose rosmsg info turtlesim/Pose 二、代码编写 1、C //包含头文件 #include "ros/ros.h" #include "turtlesim/Pose…

新秀丽(中国)CIO李德胜:数据安全是企业数字化转型的基石

大数据产业创新服务媒体 ——聚焦数据 改变商业 随着科技的飞速发展&#xff0c;企业数字化转型已经成为全球商业领域的主要趋势。数据在企业数字化转型中扮演着至关重要的角色。数据不仅仅是数字化转型的驱动力&#xff0c;更是企业实现创新、提高效率以及满足客户需求的基石…

socket 套接字

1、套接字介绍 socket起源于Unix&#xff0c;遵循“一切皆文件”出发点&#xff0c;都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。 在设计模式中&#xff0c;Socket把复杂的TCP/IP协议族隐藏在Socket接口后面&#xff0c;Socket去组织数据&#xf…

Google DeepMind推出大模型 Gemini (vs GPT4):规模最大、能力最强的人工智能模型

系列文章目录 文章目录 系列文章目录前言谷歌和 Alphabet 首席执行官桑达尔-皮查伊&#xff08;Sundar Pichai&#xff09;的说明一、Gemini 介绍二 、最先进的性能三、新一代功能四、复杂的推理能力五、理解文本、图像、音频及其他内容六、先进的编码技术七、更可靠、可扩展、…

解决:IndentationError:unindent does not match any outer indentation level

解决&#xff1a;IndentationError:unindent does not match any outer indentation level 文章目录 解决&#xff1a;IndentationError:unindent does not match any outer indentation level背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景 在…

谷达冠楠:现在做抖音电商到底怎么样

随着互联网的发展&#xff0c;电商行业也在不断地壮大。而近年来&#xff0c;抖音作为一款短视频社交平台&#xff0c;也逐渐成为了电商的新兴渠道。那么&#xff0c;现在做抖音电商到底怎么样呢? 首先&#xff0c;抖音拥有庞大的用户群体。根据数据显示&#xff0c;抖音的日活…

如何搭建自动化测试框架?8年测试老司机浅谈一下!

公司使用pythonseleniumpytest来做UI自动化测试&#xff0c;我经历了从0开始搭建自动化工程、开发测试报告web服务、编写测试用例&#xff0c;经过了一段时间的磨合&#xff0c;感觉已经比较顺手了&#xff0c;这里梳理下我采用的自动化工程目录组织结构。 整体目录结构及说明…

Selenium无头模式容易遇到的坑

在无头模式下&#xff0c;我们看不到浏览器的操作&#xff0c;但是selenium无头模式的浏览器向服务器发送的请求头和正常模式下还是有点区别的&#xff0c;这就导致了一些网站会检测到我们是用selenium来访问的&#xff0c;从而导致一些问题 下面就是我在使用selenium无头模式时…

MySQL 数据库如何实现 XA 规范?

本文我们来讨论 MySQL 的 XA 规范有哪些应用相关的内容。 MySQL 为我们提供了分布式事务解决方案&#xff0c;在前面的内容中提到过 binlog 的同步&#xff0c;其实是 MySQL XA 规范的一个应用&#xff0c;那么 XA 规范是如何定义的&#xff0c;具体又是如何应用的呢&#xff…

echarts双折线图

引用 //反应时长 durationCharts categoryCommonChart(studyBehavior.durationCharts, durationCharts) function categoryCommonChart(odata, dom){var myChart echarts.init(document.getElementById(dom));let oarr []oarr odata.series.map(function(item){let color…

QML与C++之间自定义对象输出

1.定义暴露的C类 Message.h #ifndef MESSAGE_H #define MESSAGE_H#include "QObject" #include "MessageAuthor.h"class Message : public QObject {Q_OBJECTQ_PROPERTY(MessageAuthor* author READ author )public:explicit Message(QObject *parent nu…

短视频账号矩阵系统开发源头

随着经济的高速的发展&#xff0c;越来越多的人进入短视频领域&#xff0c;都想抓住这个流量风口&#xff0c;现如今&#xff0c;短视频领域竞争加剧&#xff0c;为了满足用户对创新、多样化和高质量内容的需求&#xff0c;新版短视频矩阵运营系统应运而生。抖去推系统4.0新版&…