C语言经典算法之冒泡排序算法

news2024/11/16 17:36:28

目录

前言

建议:

简介:

一、代码实现

二、时空复杂度

时间复杂度:

空间复杂度:

总结:


前言

建议:

1.学习算法最重要的是理解算法的每一步,而不是记住算法。

2.建议读者学习算法的时候,自己手动一步一步地运行算法。

简介:

冒泡排序是一种简单但效率较低的排序算法,它通过多次遍历待排序的元素,比较相邻元素的大小并交换,将较大的元素逐步移动到数组的末尾。

 

一、代码实现

#include <stdio.h>

// 冒泡排序函数
void bubbleSort(int arr[], int n) {
    // 外层循环控制需要比较的轮数
    for (int i = 0; i < n - 1; i++) {
        // 内层循环逐一比较并交换相邻元素,确保每轮将一个较大元素移至末尾
        for (int j = 0; j < n - i - 1; j++) {
            // 如果相邻元素顺序错误,则交换它们
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

// 打印数组元素
void printArray(int arr[], int size) {
    // 遍历数组并打印每个元素
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int arr[] = {64, 25, 12, 22, 11};
    int n = sizeof(arr) / sizeof(arr[0]);

    printf("原始数组:\n");
    printArray(arr, n);

    // 调用冒泡排序函数
    bubbleSort(arr, n);

    printf("排序后的数组:\n");
    printArray(arr, n);

    return 0;
}

这个简单的C程序首先定义了一个bubbleSort函数,该函数接受一个整数数组和数组的大小作为参数,并对数组进行冒泡排序。然后,通过printArray函数打印原始数组和排序后的数组。在main函数中,我们声明一个整数数组,调用bubbleSort函数进行排序,然后再次调用printArray函数以展示排序结果。

二、时空复杂度

时间复杂度:

最好情况O(1)
当待排序数组已经是有序的情况下,冒泡排序只需进行一次遍历,每次比较都不需要交换,时间复杂度为线性级别。
最坏情况
当待排序数组是逆序的情况下,每一轮都需要进行n次比较和交换,共需要n-1轮,因此时间复杂度为O(n^2)
平均情况
在平均情况下,冒泡排序的时间复杂度也为O(n^2),因为它总是进行n-1轮遍历,每轮都要比较和可能的交换。


空间复杂度:

冒泡排序是一种原地排序算法,不需要额外的空间,因此空间复杂度为O(1)。

三、总结:

冒泡排序的主要思想是通过多次遍历数组,每次比较相邻元素并交换它们,将较大的元素逐步移动到数组的末尾。这个过程重复进行,直到整个数组有序。尽管冒泡排序实现简单,但对于大型数据集来说,效率较低,因此在实际应用中可能不太常见,但是是考研的重点

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微调您的Embedding模型以最大限度地提高RAG管道中的相关性检索

英文原文地址&#xff1a;https://betterprogramming.pub/fine-tuning-your-embedding-model-to-maximize-relevance-retrieval-in-rag-pipeline-2ea3fa231149 微调您的Embedding模型以最大限度地提高RAG管道中的相关性检索 微调嵌入前后的 NVIDIA SEC 10-K 文件分析 2023 年…

C#灵活控制多线程的状态(开始暂停继续取消)

ManualResetEvent类 ManualResetEvent是一个同步基元&#xff0c;用于在多线程环境中协调线程的执行。它提供了两种状态&#xff1a;终止状态和非终止状态。 在终止状态下&#xff0c;ManualResetEvent允许线程继续执行。而在非终止状态下&#xff0c;ManualResetEvent会阻塞线…

智能助手的巅峰对决:ChatGPT对阵文心一言

在人工智能的世界里&#xff0c;ChatGPT与文心一言都是备受瞩目的明星产品。它们凭借先进的技术和强大的性能&#xff0c;吸引了大量用户的关注。但究竟哪一个在智能回复、语言准确性、知识库丰富度等方面更胜一筹呢&#xff1f;下面就让我们一探究竟。 首先来谈谈智能回复能力…

SwiftUI之深入解析高级布局的实战教程

一、自定义动画 首先实现一个圆形布局的视图容器 WheelLayout&#xff1a; struct ContentView: View {let colors: [Color] [.yellow, .orange, .red, .pink, .purple, .blue, .cyan, .green]var body: some View {WheelLayout(radius: 130.0, rotation: .zero) {ForEach(0.…

强化学习应用(三):基于Q-learning的物流配送路径规划研究(提供Python代码)

一、Q-learning算法简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于马尔可夫决策过程&#xff08;MDP&#xff09;的问题。它通过学习一个值函数来指导智能体在环境中做出决策&#xff0c;以最大化累积奖励。 Q-learning算法的核心思想是使用一个Q值函数来估计每…

纳米量级晶圆表面微观检测技术

持续更新 背景&#xff1a;晶圆表面形状偏差分为&#xff1a;宏观几何误差&#xff0c;中间几何误差&#xff0c;微观几何误差&#xff0c;跟别用表面形状误差&#xff0c;表面波纹度&#xff0c;表面粗度来描述。 主要技术&#xff1a;微分剪切干涩显微技术&#xff0c;五步…

Dubbo分层设计之Transport层

前言 Dubbo 框架采用分层设计&#xff0c;最底下的 Serialize 层负责把对象序列化为字节序列&#xff0c;再经过 Transport 层网络传输到对端。一次 RPC 调用&#xff0c;在 Dubbo 看来其实就是一段请求报文和一段响应报文的传输过程。 理解Transport Transport 层即网络传输…

计算机毕业设计----SSH在线水果商城平台含管理系统

项目介绍 本项目分为前后台&#xff0c;分为普通用户与管理员两个角色&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,修改密码,类别管理,水果管理,订单管理,网站论坛管理,网站公告管理等功能。 …

抖音小店2024年创业新趋势,新手找项目,不要再错过这次的机会了

大家好&#xff0c;我是电商花花。 现在的抖音小店完全是电商创业中的一个优秀代名词和最轻便的创业项目&#xff0c;更是以独特的直播达人带货的优势将店铺激发出来。 今天给大家介绍下抖音小店的运作方式&#xff0c;并分析互联网创业的机遇&#xff0c;并提供相关的再做点…

Unity中URP下 SimpleLit框架

文章目录 前言一、整体框架1、该Shader是用于低端设备的2、包含一个Properties3、只有一个SubShader4、如果SubShader错误&#xff0c;返回洋葱紫5、调用自定义ShaderGUI面板 二、SubShader中1、Tags2、Pass 三、我们看一下ForwardLit的Pass1、混合模式、深度写入、面皮剔除、透…

ZooKeeper 简介

1、概念介绍 ZooKeeper 是一个开放源码的分布式应用程序协调服务&#xff0c;为分布式应用提供一致性服务的软件&#xff0c;由雅虎创建&#xff0c;是 Google Chubby 的开源实现&#xff0c;是 Apache 的子项目&#xff0c;之前是 Hadoop 项目的一部分&#xff0c;使用 Java …

提高执行力,关键在于管理者做到这四个字

执行力&#xff0c;对于个人而言&#xff0c;它就是办事的效能&#xff1b;而对于领导来说&#xff0c;它是管理的能力。 老板命令员工去买复印纸&#xff0c;员工第一次买回了一沓复印纸&#xff0c;第二次买了三摞复印纸&#xff0c;却仍然没有得到老板的满意。员工之所以跑…

Halcon滤波器 laplace 算子

Halcon滤波器 laplace 算子 使用laplace 算子对图像进行二次求导&#xff0c;会在边缘产生零点&#xff0c;因此该算子常常与zero_crossing算子配合使用。求出这些零点&#xff0c;也就得到了图像的边缘。同时&#xff0c;由于laplace算子对孤立像素的响应要比对边缘或线的响应…

element upload 自定义上传 报错Cannot set properties of null (setting ‘status‘)

element upload 自定义上传 报错Cannot set properties of null (setting ‘status’) 问题展示 原因分析 自定义上传方式 fileList 显示一切正常&#xff0c;状态也是成功 文件url通过URL.createObjectURL(file.raw) 进行添加 以下为配置代码 <el-uploadclass"uplo…

【K12】Python写串联电阻问题的求解思路解析

问题源代码 方法&#xff1a;calculate_circuit_parameter 构造题目&#xff1a; 模板&#xff1a; 已知电阻R1为 10Ω&#xff0c;电阻R2为 5Ω&#xff0c;电压表示数为2.5V&#xff0c;求电源电压U&#xff1f; 给合上面题目&#xff0c;利用Python程序&#xff0c;可以任…

【ScienceAI Weekly】DeepMind拆分的AI药企达成30亿美元新协议;网传字节跳动在美招聘生物/化学/物理人才

AI for Science 的新成果、新动态、新视角—— 由 DeepMind 拆分的 AI 药企首次达成制药合作&#xff0c;价值 30 亿美元微软协助科研人员发现 3,200 万种新电池材料网传 TikTok 在美国各地招募计算生物学、量子化学、分子动力学和物理方面的人才科大讯飞拟分拆医疗业务在港交…

遥感卫星影像现拍,哪里想看拍哪里!

我们为大家分享了查看实时卫星影像的方法。 虽然这个网站的卫星影像10分钟一更新&#xff0c;让世界尽收眼底&#xff0c;但分辨率却非常有限。 如果项目中需要更高清的卫星影像&#xff0c;且对时效性又有较高的要求&#xff0c;那么可以考虑用卫星专门拍摄。 光学遥感卫星…

为什么有人说PMP是水证,它的含金量到底怎么样?

在我国大陆&#xff0c;有好多证书被商业化得太重了&#xff0c;甚至演变成了个人或一些公司摇钱的工具。所以有些证书受人吹捧它崛起的快&#xff0c;但是活不长&#xff0c;甚至“夭折”&#xff0c;比如以前微软系列的证书&#xff1b; 而PMP认证从国外引进大陆这么多年了&…

【昕宝爸爸小模块】守护线程、普通线程、两者之间的区别

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你&#x1f44d;点赞、&#x1f5c2;️收藏、加❤️关注哦。 本文章CSDN首发&#xff0c;欢迎转载&#xff0c;要注明出处哦&#xff01; 先感谢优秀的你能认真的看完本文&…

打造完美跨境商城源码,助你轻松进军国际市场

随着全球化的深入&#xff0c;跨境电商已成为各国企业拓展国际市场的重要途径之一。根据最新数据显示&#xff0c;跨境电商市场规模逐年扩大&#xff0c;预计未来几年将保持较高增长率。因此&#xff0c;拥有一套完善的跨境商城源码成为企业进军国际市场的关键。 跨境商城源码…