c语言-冒泡排序

冒泡排序原理:
冒泡排序是一种简单直观的排序算法,它重复地遍历待排序的元素序列,比较相邻的两个元素,如果它们的顺序不符合要求(例如升序要求前面的元素小于后面的元素),则交换它们的位置。遍历整个序列的过程会多次进行,每一轮都会把一个最大(或最小,取决于排序顺序)的元素“浮”到最右侧。

具体过程如下:

  1. 比较相邻元素: 从第一个元素开始,比较相邻的两个元素的大小。

  2. 交换元素位置: 如果顺序不符合要求(例如升序时前面的元素大于后面的元素),则交换它们的位置。

  3. 一轮结束: 一轮比较和交换之后,最大的元素已经被“浮”到最右侧。

  4. 重复步骤1-3: 重复执行上述步骤,每次都会确定一个未排序部分的最大元素的位置。

  5. 终止条件: 当整个序列都有序时,排序完成。

冒泡排序的特点:

  • 稳定性: 冒泡排序是稳定的排序算法相等元素的相对位置在排序前后不会改变。

  • 时间复杂度: 最坏情况下的时间复杂度为 O(n^2)最好情况下的时间复杂度为 O(n)。

  • 空间复杂度: 冒泡排序仅需要常数级的额外空间。

尽管冒泡排序的性能相对较差,但由于其简单易懂的特点,适用于对数据量较小的序列进行排序。在实际应用中,对于大规模数据集,通常会选择更高效的排序算法,如快速排序或归并排序。

用c语言进行冒泡排序时,遇到的问题:

下面是时隔很久用c写出的代码:(错误的)

#include<stdio.h>
int main(){	int arr[]={2,1,5,6,3,4};for(int i=0;i<n-1;i++){for(int j=0;j<n-1-i;j++){if(arr[j]>arr[j+1]){arr[j]=arr[j+1];}}}print("输出序列:",arr[j]); 
}   

代码存在以下几点错误:

  1. 没有定义变量 n,我假设 n 是数组的长度,因此在代码中添加了 int n = sizeof(arr) / sizeof(arr[0]);

  2. 在冒泡排序中,当发现 arr[j] > arr[j+1] 时,应该交换它们的值,而不是将 arr[j] 赋值为 arr[j+1]。因此,我修改了相应的代码。

  3. printf 函数中,应该使用小写的 printf,而不是 print

修改后的代码如下:

#include<stdio.h>int main() {int arr[] = {2, 1, 5, 6, 3, 4};int n = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - 1-i; j++) {if (arr[j] > arr[j+1]) {// 交换 arr[j] 和 arr[j+1] 的值int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}printf("输出序列:");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}return 0;
}

在标准的冒泡排序算法中内层循环的终止条件通常是 n - 1 - i其中 i 是外层循环的当前迭代次数。这是因为在每一轮外层循环之后,数组的最后 i 个元素已经被确定为最大的 i 个元素,所以内层循环无需再遍历这些已经确定位置的元素。

这样的代码应该能够正确地对数组进行冒泡排序,并输出排序后的序列。

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

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

相关文章

国家开放大学平时作业 练习题

试卷代号&#xff1a;1377 理工英语3 参考试题 一、交际用语&#xff08;共计10分&#xff0c;每小题2分&#xff09; 1-5题&#xff1a;选择正确的语句完成下列对话&#xff0c;并将答案序号写在答题纸上。 1.-1 won the first prize in todays speech contest. - …

R语言——图解taxize,强烈推荐收藏关注,持续更新中

图解taxize 1. taxize分解思路1.1 图解说明 2. 针对不同数据库的函数组2.1 APGⅢ2.2 BOLD&#xff08;barcode of life data system&#xff09; 1. taxize分解思路 taxize可以帮助人们从许多数据库中获取信息。 由于要处理的数据库很多&#xff0c;导致taxize包含的功能函数…

基本锁介绍

锁 1、分类 乐观锁:在select的时候不会加锁&#xff0c;是基于程序实现的&#xff0c;所以不会存在死锁的情况。适用于读多写少的场景&#xff08;写的并发量相对不高&#xff09;&#xff0c;可以提高系统的吞吐量。因为如果写多的话&#xff0c;乐观锁会有很大机率更新失败…

可持续创新 精选路线

在加速企业数字化转型、 实现智能制造的升级之路上&#xff01; 使用好的工具固然重要&#xff0c; 而有好工具&#xff0c;也要会用工具。生信科技不仅为企业提供强大的产品支持&#xff0c; 更有全方位的定制化服务&#xff0c; 提升工程师的工具应用能力&#xff0c; 让企业…

C++ Qt QFile用法介绍与代码演示

作者:令狐掌门 技术交流QQ群:675120140 csdn博客:https://mingshiqiang.blog.csdn.net/ 文章目录 打开和关闭文件读取文件写入文件示例代码自定义格式文件解析在Qt 中 QFile 的类用于读写本地文件系统中的文件。它继承自 QIODevice,所以它包含了许多用于数据输入和输出的功…

c++ 课程笔记

105课: cpp文件分为 .h .cpp .cpp 文件 110课:124课 深拷贝 浅拷贝 自建拷贝构造解决浅拷贝释放new后堆区析构函数的问题 (浅拷贝 拷贝内存地址, 释放堆区时 导致源数据 释放时,该地址无数据?而报错) 浅拷贝: 拷贝了对方的值和 堆区内存地址(删除 影响原数据堆区) 深拷贝…

第二类曲线积分@对坐标的曲线积分

文章目录 abstract对坐标的曲线积分变力沿曲线所做的功平均功(恒力做功)变力做工弧段微分第二类曲线积分的定义函数在曲线弧上连续推广:空间曲线弧的第二类曲线积分常用形式和简写利用第二类曲线积分表示变力做功性质 计算方法证明对坐标 x x x对坐标 y y y相加积分限和曲线弧起…

文件批量重命名技巧:图片文件名太长怎么办?告别手动改名方法

在日常生活中&#xff0c;常常会遇到文件名过长导致的问题。尤其是在处理大量图片文件时&#xff0c;过长的文件名可能会使得文件管理变得混乱不堪。现在来看下云炫文件管理器如何批量重命名&#xff0c;让图片文件名变得更简洁&#xff0c;提高工作效率。 操作1、在云炫文件…

python运算符重载之字符串显示和右侧加法

1 python运算符重载之字符串显示和右侧加法 1.1 重载字符串显示 1.1.1 str和repr python调用prin()t时&#xff0c;自动调用__str__和__repr__&#xff0c; python调用str()时&#xff0c;自动调用__str__和__repr__&#xff0c; python调用repr()时&#xff0c;自动调用_…

深入理解C语言指针基础概念:定义、内存地址与声明初始化

导言&#xff1a; 在C语言中&#xff0c;指针是一项强大而重要的概念&#xff0c;直接涉及内存的底层操作。理解指针的基础概念对于熟练运用C语言以及理解底层系统工作原理至关重要。本文将深入研究指针的定义、内存地址的概念以及指针的声明和初始化&#xff0c;帮助读者建立对…

C++之unordered_map/set的使用

前面我们已经学习了STL中底层为红黑树结构的一系列关联式容器——set/multiset 和 map/multimap(C98). unordered系列关联式容器 在C98中, STL提供了底层为红黑树结构的一系列关联式容器, 在查询时效率可达到log2N,即最差情况下需要比较红黑树的高度次, 当树中的节点非常多时,…

3 动态规划解解码问题

来源&#xff1a;LeetCode第91题 难度&#xff1a;中等 描述&#xff1a;一条包含字母A-Z的消息通过以下映射进行了编码: A->1,B->2,z->26,要接吗已编码的消息&#xff0c;所有数字必须基于上述映射的方法&#xff0c;反向映射回字母(可能由多种方法)&#xff0c;例…

MindStudio学习一 整体介绍

一场景介绍 二 安装介绍 1.LINUX 采用无昇腾硬件采用linux 分部署 2.WINDOWS 3.linux下安装整体步骤 3.1安装依赖 3.2 安装步骤 1.gcc cmake 等依赖 2.python3.7.5 3.pip 安装依赖 4.安装JDK 5.安装 Ascend-cann-toolkit 6.解压安装Mindstudio 7.进入bin路径 ./…

MySQL where 子句

文章目录 前言MySQL where 子句语法 从命令提示符中读取数据使用PHP脚本读取数据后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Mysql &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力…

Javascript的form表单校验输入框

以下是HTML代码&#xff1a; <form name"myForm" onsubmit"return validateForm()"><label for"name">姓名&#xff1a;</label><input type"text" id"name" name"name"><br><l…

【ArcGIS Pro微课1000例】0035:栅格影像拼接(dem高程数据)

本实验讲解在ArcGIS Pro中,栅格数据的两种拼接(镶嵌)方法,适用于遥感影像、DOM、DEM、DSM等常见栅格数据。 文章目录 一、加载实验数据二、栅格拼接工具1. 镶嵌2. 镶嵌至新栅格三、注意事项四、拓展阅读一、加载实验数据 加载配套实验数据中的0035.rar中的两个dem数据,如…

455.分发饼干

原题链接&#xff1a;455.分发饼干 思路&#xff1a; 先使用大饼干喂饱大胃口的&#xff0c;再到剩余的里面用大饼干喂剩下大胃口的 &#xff0c;直到全部满足或者喂不了了为止。 全代码&#xff1a; class Solution { public:int findContentChildren(vector<int>&am…

【从删库到跑路】MySQL数据库 — E-R图 | 关系模型

&#x1f38a;专栏【MySQL】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 文章目录 &#x1f339;简述什么是E-R图⭐核心概念 &#x1f339;E-R图…

LeetCode40. Combination Sum II

文章目录 一、题目二、题解 一、题目 Given a collection of candidate numbers (candidates) and a target number (target), find all unique combinations in candidates where the candidate numbers sum to target. Each number in candidates may only be used once in…

完美解决:Nginx访问PHP出现File not found.

目录 解决方法一&#xff1a; 解决方法二&#xff1a; 遇到 File not found. 出现的问题解决&#xff1a; 解决方法一&#xff1a; 修改nginx的主配置文件。 vi /etc/nginx/nginx.conf location ~ \.php$ { root html; fastcgi_pass …