当前位置: 首页 > news >正文

排序算法 —— 冒泡排序

目录

1.冒泡排序的思想

2.冒泡排序的实现

3.冒泡排序的总结


1.冒泡排序的思想

冒泡排序的思想就是在待排序序列中依次比较相邻两个元素将大的or小的元素往后挪,每一趟都能保证将至少一个元素挪动到正确的位置,然后在待排序序列中重复该过程

2.冒泡排序的实现

代码如下:

void BubbleSort(int* a, int n)
{for (int j = 0; j < n; j++)  //枚举结束位置和最后一个元素位置的差值 {for (int i = 1; i < n-j; i++) //依次枚举相邻的两个元素 {if (a[i - 1] > a[i]){swap(&a[i - 1], &a[i]);}}}
}

可以看出,冒泡排序十分的暴力,枚举的次数在最好和最坏情况下都是一个等差数列,但是,有些比较是没有必要的。比如:当某一趟排序中没有发生交换的时候,说明序列有序了,不需要再比较了,所以我们可以对代码进行优化。

优化之后的代码如下:

  • 我们可以增加一个标记位,标记是否发生了交换。
#include <stdio.h>void swap(int* p1, int *p2)
{int t = *p1;*p1 = *p2;*p2 = t;
}void BubbleSort(int* a, int n)
{for (int j = 0; j < n; j++)  //枚举结束位置和最后一个元素位置的差值 {int flag = 0;for (int i = 1; i < n-j; i++) //依次枚举相邻的两个元素 {if (a[i - 1] > a[i]){swap(&a[i - 1], &a[i]);flag = 1;}}if (flag == 0){break;}}
}int main()
{int nums[] = {5,4,2,6,3,1,8,9,7};BubbleSort(nums, 10);int i = 0;while(i < sizeof(nums)/sizeof(int)){printf("%d ",nums[i]);i++;}return 0;
}

3.冒泡排序的总结

  • 时间复杂度:O(N^2)。
  • 空间复杂度:O(1)。
  • 稳定性:稳定 。
http://www.lryc.cn/news/466361.html

相关文章:

  • QT--文本框 QLineEdit、qtextedit
  • Qt编写的modbus模拟器/支持网络和串口以及websocket/支持网络rtu
  • Standard_Matrix
  • js 通过input,怎么把选择的txt文件转为base64格式
  • 华为HCIP-openEuler认证详解
  • YOLO11改进 | 注意力机制 | 添加双重注意力机制 DoubleAttention【附代码+小白必备】
  • sentinel原理源码分析系列(四)-ContextEntry
  • Tcp协议讲解与守护进程
  • 学习threejs,THREE.LineDashedMaterial 虚线材质,基于gosper高斯帕曲线生成雪花动画
  • LeetCode 热题100之哈希
  • 软工——模块设计(爱啦爱啦)
  • Xmind一款极简思维导图和头脑风暴软件,支持PC和移动端,Xmind 2024.10.01101版本如何升级到Pro版?简单操作,最新可用!
  • 自动化工具:Ansible
  • 我是类(最终版)
  • 详解ip route
  • OpenGL进阶系列04 - OpenGL 点精灵
  • VSCode按ctrl与鼠标左键无法实现跳转的解决办法
  • U盘数据丢失不用慌,这4个工具可以帮你恢复。
  • 如何在Ubuntu上挂载一块硬盘:详解方案与实操步骤【小白无坑版】
  • 【JAVA】第三张_Eclipse下载、安装、汉化
  • go-zero系列-限流(并发控制)及hey压测
  • Electron-(三)网页报错处理与请求监听
  • 银河麒麟(debian)下安装postgresql、postgis
  • 【已解决】【Hadoop】 Shell命令易错点及解决方法
  • ST7789读取ID错误新思路(以STC32G为例)
  • 【MySQL】入门篇—基本数据类型:使用ORDER BY进行排序
  • java线程池bug的一些思考
  • 深入解析浮动布局及其在现代Web开发中的应用与替代(浮动的概念及应用、如何清除浮动、使用Flex布局和Grid布局的区别、使用`float`布局的历史和现状)
  • WPF基础权限系统
  • 【Java函数篇】Java 8 Predicate函数接口的用法详解