使用C语言实现冒泡排序算法

2023-05-16

冒泡排序

冒泡排序属于交换排序的一种。所谓交换,就是根据序列中两个关键字的比较结果来确定这两个记录在序列中的位置。

冒泡排序的基本思想: 假设一个待排序列长度为n,从后往前(或从前往后)两两比较元素的值,若为正序则不操作,若为逆序(即A[i-1]>A[i])则交换它们,直到序列比较完,称为一趟“冒泡”,此时将最小的元素交换到待排序列的第一个位置,也是它的最终位置。下一趟排序时,上一趟确定的最小元素不再参与排序,每趟排序都将序列中最小的元素交换到第一个位置,依次类推,最多进行n-1趟冒泡就能把所有元素排好序。
排序完成的判断条件: 使用flag作为标志位,每趟冒泡前初始为false,若发生元素交换则置为true,在一趟冒泡完成后判断flag值,若为true则继续排序,若为false则说明没有发生元素交换,排序完成。
冒泡排序的性能分析:
空间复杂度:仅进行元素交换需要常数个辅助空间,因此空间复杂度为O(1)
时间复杂度:当待排序列已经有序时,明显进行一趟冒泡后flag值为false,排序完成,直接结束,比较次数为n-1,移动次数为0;当待排序列逆序时,需要进行n-1趟冒泡,第i趟排序需要进行n-i次比较,每次比较必须移动元素3次以交换位置,在这种情况下,
在这里插入图片描述
从而最坏情况下的时间复杂度为O(n2)。平均时间复杂度也为O(n2)
举例说明冒泡过程:
设一个初始序列为A={10,6,9,3,5,2}
第一趟冒泡结果,A={2,10,6,9,3,5} (元素2到达最终位置)
第二趟冒泡结果,A={2,3,10,6,9,5} (元素3到达最终位置)
第三趟冒泡结果,A={2,3,5,10,6,9} (元素5到达最终位置)
第四趟冒泡结果,A={2,3,5,6,10,9} (元素6到达最终位置)
第五趟冒泡结果,A={2,3,5,6,9,10} (元素9到达最终位置)
此时排序完成
传统冒泡排序算法如下:

#include <stdio.h>
void bubblesort(int a[],int length);
void swap(int a[],int i,int j);
int main()
{
   int array[6]={10,6,9,3,5,2}; /*定义一个数组*/
   int i;
   bubblesort(array,6);
   for(i=0;i<6;i++)
   {
       printf("array[%d]=%d\n",i,array[i]); /*输出排序后的数组*/
   }
}
void bubblesort(int a[],int n) /*冒泡排序算法*/
{
    if(n==0||n<2) /*序列长度小于2直接返回*/
        return;
    int i,j,flag;
    for(i=0;i<n;i++) /*外层循环比较的次数*/
    {
        flag=0;
        for(j=n-1;j>i;j--) /*内层循环比较的范围*/
        {
            if(a[j-1]>a[j])
            {
                swap(a,j-1,j);
                flag=1;
            }
        }
        if(flag==0)
            return;
    }
}
void swap(int a[],int i,int j) /*交换元素位置*/
{
    int temp;
    temp=a[i];
    a[i]=a[j];
    a[j]=temp;
}

运行结果如下图示:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用C语言实现冒泡排序算法 的相关文章

随机推荐

  • vnc linux 客户端_适用于Linux的最佳VNC Viewer客户端

    vnc linux 客户端 Remote management of Linux servers or clients can be done in different ways One way is using ssh But ssh d
  • Atlas200DK_版本1.0.12_CANN安装测试

    准备 Atlas 200 DK开发者套件 版本1 0 12 制作SD卡 https www hiascend com document detail zh Atlas200DKDeveloperKit 1012 environment at
  • 蚂蚁帮路由器Antbang A3s V2.0刷入OpenWrt/LEDE

    参考资料 路由器基本常识 冰色阳光的博客 CSDN博客 路由器bootloader是什么 https www right com cn forum thread 3191610 1 1 html 已知问题 刷入OpenWrt LEDE后 x
  • 【MSYS2】隐式路径风格转换

    MSYS2 隐式路径风格转换 路径风格转换规则Cygwin工具MSYS2不会自动将Windows风格的路径转换为Unix风格Windows原生工具在特定情况下 xff0c MSYS2会自动将 貌似Unix风格的路径 转换为Windows风格
  • 【C/C++】教你区分libc、glibc、libgcc、libstdc++等名词

    libc C标准库 https en wikipedia org wiki C standard library libc作为抽象概念 从一方面来说 xff0c libc可以表示 C标准库 这个抽象概念 按照ISO C规范所述 xff0c
  • 【TX2刷机】TX2+ubuntu18.04+jetpack4.4

    1 下载并安装VMware xff0c 安装Ubuntu18 04 desktop虚拟机 Ubuntu镜像 xff1a https mirrors tuna tsinghua edu cn ubuntu releases 更换Ubuntu1
  • 如何在云主机上安装kali----------腾讯云实战篇----巨详细

    如何在云主机上安装kali 腾讯云实战篇 巨详细 亚马逊云主机安装kali最为简单 xff0c 官方有kali的镜像 xff0c 直接安装就是了 本文就不做介绍了 具体实现思路 xff1a 由于云主机官方没有提供kali的镜像 xff0c
  • pycharm如何去掉VIM emulator

    只需要在tools gt vim emulator xff0c 把前面的勾去掉即可
  • nohup: failed to run command `python3‘: No such file or directory

    nohup failed to run command 96 python3 No such file or directory 我的 python 是用别名设置的 xff0c 可以直接使用 xff0c 但是加上 nohup 就会报错 xf
  • Wxpython控件自适应窗口大小GridBagSizer

    使用wx GridBagSizer 使控件能随着用户缩放窗口大小而自动调整 xff0c wx GridBagSizer 把空间用横线和竖线划分成一个个格子 xff0c 用控价填充这些格子 xff0c 从而自由的控制布局 原来的布局代码 xf
  • 随笔:MybatisPlus代码生成器(新)

    Mybatis Plus 官网 xff1a https baomidou com 代码生成器 新 xff1a https baomidou com pages 779a6e 适用版本 xff1a mybatis plus generator
  • 出现insmod: can't insert 'kernel_hello.ko': invalid module format解决方法

    出现insmod can 39 t insert 39 kernel hello ko 39 invalid module format解决方法 xff1a 问题 xff1a gt ls info proc tmp apps init ro
  • 手撕Buck!Buck公式推导过程

    这个文章我本来没打算写的 xff0c 因为之前我已经写了 手撕Boost xff01 Boost公式推导及实验验证 xff0c 在我看来 xff0c Buck与boost是完全类似的 xff0c 明白一个 xff0c 另外一个也就明白了 不
  • centos8, 未找到匹配的参数: iftop 错误:没有任何匹配: iftop

    yum install iftop y 上次元数据过期检查 xff1a 0 00 51 前 xff0c 执行于 2023年04月25日 星期二 01时29分12秒 未找到匹配的参数 xff1a iftop 错误 xff1a 没有任何匹配 i
  • 写论文时如何翻译外文文献?

    搞科研就是集所有既有成果为大成者 想要论文写得好 xff0c 一定要有丰富的知识储备和对该领域专业技能的熟练掌握 xff0c 这其中不可能少的了外文文献的知识储备 外文文献的阅读十分重要 那么阅读的前提是什么呢 xff1f 翻译 xff01
  • Hive的计算引擎,你知道哪几种?

    作为大数据开发工程师来说 xff0c Hive数据库的开发还是比较重要的 xff0c 所以我们需要知道hive数据库的计算引擎有哪些 xff0c 这样在做hive调优的时候 xff0c 也是有一定的辅助作用 大家enjoy Hive支持Ma
  • C++头文件的作用

    C 43 43 编译模式 通常 xff0c 在一个C 43 43 程序中 xff0c 只包含两类文件 cpp文件和 h文件 其中 xff0c cpp文件被称作C 43 43 源文件 xff0c 里面放的都是C 43 43 的源代码 xff1
  • cephadm部署ceph集群

    使用 cephadm 安装 Ceph 集群 centos7 4三台 Ceph octopus 15 2 3 Python 3 6 Docker 默认最新的 注意 xff1a OSD 硬盘需要大于 5G 官方文档 xff1a https do
  • 图像处理算法其实都很简单

    要学习高斯模糊我们首先要知道一些基本概念 xff1a 线性滤波与卷积的基本概念 线性滤波可以说是图像处理最基本的方法 xff0c 它可以允许我们对图像进行处理 xff0c 产生很多不同的效果 做法很简单 首先 xff0c 我们有一个二维的滤
  • 使用C语言实现冒泡排序算法

    冒泡排序 冒泡排序属于交换排序的一种 所谓交换 xff0c 就是根据序列中两个关键字的比较结果来确定这两个记录在序列中的位置 冒泡排序的基本思想 xff1a 假设一个待排序列长度为n xff0c 从后往前 xff08 或从前往后 xff09