首页 > 其他分享 >冒泡排序(详细讲解)

冒泡排序(详细讲解)

时间:2024-11-10 14:20:01浏览次数:3  
标签:tmp sz arr int 冒泡排序 详细 讲解 排序

对于冒泡排序,字面理解就是对一段数据进行排序
比如说你有10个数据

int arr[10]={3,1,7,5,8,9,0,2,4,6};

你想对这些数据进行从小到大的排序,一个个用if和else去进行比较太麻烦了,所以这时候冒泡排序就可以帮你提高效率
首先,先文字讲解,这里总共有十个数据,而我们每次排序都会将一行中大的数据移到右边去,所以总共要进行10-1=9次循环,而在每一次循环中,又要连续对相邻的两个数据进行比较,但你会发现,随着循环次数的变多,进行比较的次数就会随之变小,因此我们的代码就可以这么写

void bubble_sort(int arr[], int sz)//参数接收数组元素个数
 {
 int i = 0;
 for(i=0; i<sz-1; i++)
 {
 int j = 0;
 for(j=0; j<sz-i-1; j++)
 {
 if(arr[j] > arr[j+1])
 {
 int tmp = arr[j];
 arr[j] = arr[j+1];
 arr[j+1] = tmp; }
 }
 }
 }
 int main()
 {
 int arr[] = {3,1,7,5,8,9,0,2,4,6};
  int sz = sizeof(arr)/sizeof(arr[0]);
    bubble_sort(arr, sz);
    int i = 0;
    for(i=0; i<sz; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
 }

但可以对改代码还能进一步优化,如果该数据在其中一组循环中已经按照从小带大的顺序拍好了,那是不是就可以不用再进行后面的循环了?
只对定义的函数进行修改

void bubble_sort(int arr[], int sz)//参数接收数组元素个数
{
    int i = 0;
    for(i=0; i<sz-1; i++)
    {
        int flag = 1;//假设这⼀趟已经有序了
        int j = 0;
        for(j=0; j<sz-i-1; j++)
        {
            if(arr[j] > arr[j+1])
            {
                flag = 0;//发⽣交换就说明,⽆序
                int tmp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tmp;
            }
        }
        if(flag == 1)//这⼀趟没交换就说明已经有序,后续⽆序排序了
         break;
    }
 }

标签:tmp,sz,arr,int,冒泡排序,详细,讲解,排序
From: https://blog.csdn.net/2402_87236952/article/details/143660233

相关文章

  • 超详细!ComfyUI 全方位入门指南,初学者必看,附多个实践操作
    本文正文字数约8300字,阅读时间20分钟。如果按照文章实操一遍,预计时间在半小时到两小时不等。我还是推荐在自己电脑上自行搭建一套GUI(也就是用户图形界面)来学习和使用StableDiffusion,也就是本文即将介绍的ComfyUI。本文将为你提供一份全面的ComfyUI入门指南,涵盖......
  • 这是我见过讲解大模型最详细的一本书!学习大模型的建议都去读!
    作为当下最先进的深度学习架构之一,Transformer被广泛应用于自然语言处理领域。它不单替代了以前流行的循环神经网络(recurrentneuralnetwork,RNN)和长短期记忆(longshort-termmemory,LSTM)网络,并且以它为基础衍生出了诸如BERT、GPT-3、T5等知名架构。......
  • Stable Diffusion本地化部署超详细教程(手动+自动+整合包三种方式)
    一、StableDiffusion简介2022年作为AIGC(ArtificialIntelligenceGeneratedContent)时代的元年,各个领域的AIGC技术都有一个迅猛的发展,给工业界、学术界、投资界甚至竞赛界都注入了新的“AI活力”与“AI势能”。其中在AI绘画领域,StableDiffusion当仁不让地成为了开源社......
  • 黑客入门基础知识(非常详细),黑客入门到精通教程,收藏这篇就够了
    黑客基础知识(一)IP地址是什么网际协议地址(即IP地址)。它是为标识Internet上主机位置而设置的。Internet上的每一台计算机都被赋予一个世界上唯一的32位Internet地址(InternetProtocolAddress,简称IPAddress),这一地址可用于与该计算机机有关的全部通信。为了方便起见,在应用上......
  • 网络安全学习路线(非常详细)从零基础入门到精通,看完这一篇就够了_网络安全体系培训内容
    小白人群想学网安但是不知道从哪入手?一篇文章告诉你如何在4个月内吃透网安课程,掌握网安技术一、基础阶段1.了解网安相关基础知识了解中华人民共和国网络安全法、熟知网络安全的相关概念:包括信息安全、风险管理、网络攻防原理、认证与加密等基本概念,2.Linux操作系统Lin......
  • 2024年最强网络安全学习路线,详细到直接上清华的教材!
    关键词:网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线首先咱们聊聊,学习网络安全方向通常会有哪些问题前排提示:文末有CSDN官方认证网络安全入门资料包!1、打基础时间太长学基础花费很长时间,光语言都有几门,有些人会倒在学习linux系统及命令的路上,更多的人......
  • 超详细C语言函数栈帧的创建和销毁的过程讲解,细节满满
    目录一、ebp和esp二、main函数的函数栈帧(解释反汇编)(1)、push操作(2)、mov操作(3)、sub操作(4)、然后又是三个push操作(5)、lea操作:(6)、接着四步操作:三、如何创建的变量(创建变量的反汇编)(1)、第一个inta=10:此时如果没有给a变量赋值,那么该位置的值就是CCCCCCCC,这就是为什么未......
  • 【C++】详细介绍:priority_queue的使用、适配器、deque介绍、仿函数
    目录一、介绍二、使用三、函数模版和类模板的区别四、适配器1、适配器适配栈扩展:2、deque(双端队列)缺省模版五、仿函数一、介绍(1)、priority_queue称为优先级队列,是一种容器适配器,不是队列也不是容器。(2)、该结构的底层是堆结构,默认是大堆,用模版参数来区分是大堆......
  • 基于大数据 Python 作业管理系统(源码+LW+部署讲解+数据库+ppt)
    !!!!!!!!!选题不知道怎么选不清楚自己适合做哪块内容都可以免费来问我避免后期給自己答辩找麻烦增加难度(部分学校只有一次答辩机会没弄好就延迟毕业了)会持续一直更新下去有问必答一键收藏关注不迷路源码获取:https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwd=jf1d提取码:......
  • JSP程序设计2577互联网在线医疗诊断系统【源码+讲解视频】
    项目包含:源码、参考论文、讲解视频、说明文档运行环境:推荐jdk1.8开发工具:Eclipse、MyEclipe以及idea(推荐)操作系统:windows108G内存以上(其他windows)浏览器:GoogleChrome(推荐)、Edge、360浏览器;数据库:MySQL5.7;数据库可视化工具:NavicatPremium推荐)以及其他Navicat版......