专栏首页C语言中文社区图解C语言冒泡排序算法,含代码分析
原创

图解C语言冒泡排序算法,含代码分析

冒泡排序算法的原理

  • 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  • 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  • 针对所有的元素重复以上的步骤,除了最后一个。
  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

代码实现

/**
 * Created by 冲哥 on 2020.11.28
 * 微信关注公众号【C语言中文社区】,免费领取200G精品学习资料
 */
#include<stdio.h>

int *bubble_sort(int arr[], int len);

int main() {
    int *result, len;
    int data[] = {12, 43, 23, 13, 65, 17, 98, 45, 67, 88};
    len = (int)sizeof(data) / sizeof(*data);
    printf("使用冒泡排序前的原始数据是:");
    for (int i = 0; i < len; i++) {
        printf("%3d", data[i]);
    }
    printf("\n");
    result = bubble_sort(data, len);
    printf("使用冒泡排序后的数据是:");
    for (int j = 0; j < len; j++) {
        printf("%3d", *(result + j));
    }
    return 0;
}

/*!
 * 循环比较相邻的元素。如果第一个比第二个大,就交换他们两个
 * @param arr
 * @param len
 * @return arr
 */
int *bubble_sort(int arr[], int len) {
    int temp;

    for (int i = 0; i < len - 1; i++) {
        for (int j = 0; j < len - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
        printf("第%d次循环排序后结果:", i + 1);
        for (int k = 0; k < len; k++) {
            printf("%3d", arr[k]);
        }
        printf("\n");
    }
    return arr;
}

运行结果

使用冒泡排序前的原始数据是: 12 43 23 13 65 17 98 45 67 88
第1次循环排序后结果: 12 23 13 43 17 65 45 67 88 98
第2次循环排序后结果: 12 13 23 17 43 45 65 67 88 98
第3次循环排序后结果: 12 13 17 23 43 45 65 67 88 98
第4次循环排序后结果: 12 13 17 23 43 45 65 67 88 98
第5次循环排序后结果: 12 13 17 23 43 45 65 67 88 98
第6次循环排序后结果: 12 13 17 23 43 45 65 67 88 98
第7次循环排序后结果: 12 13 17 23 43 45 65 67 88 98
第8次循环排序后结果: 12 13 17 23 43 45 65 67 88 98
第9次循环排序后结果: 12 13 17 23 43 45 65 67 88 98
使用冒泡排序后的数据是: 12 13 17 23 43 45 65 67 88 98

图解冒泡排序

使用冒泡排序前的原始数据是: 12 43 23 13 65 17 98 45 67 88

在这里只分析下一次循环的过程

  • 第1次比较
  • 第2次比较
    在这里插入图片描述
  • 第3次比较
    在这里插入图片描述
  • 第4次比较
    在这里插入图片描述
  • 第5次比较
    在这里插入图片描述
  • 第6次比较
    在这里插入图片描述
  • 第7次比较
    在这里插入图片描述
  • 第8次比较
    在这里插入图片描述
  • 第9次比较
    在这里插入图片描述

第1次循环排序后结果: 12 23 13 43 17 65 45 67 88 98

在这里插入图片描述

依次,可以通过第二次循环、第三次循环...第len-1次循环得到最终的数据

在这里插入图片描述

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【C语言】排序算法之冒泡排序

    冒泡排序(Bubble Sort):是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复...

    Regan Yue
  • 详解排序算法--插入排序和冒泡排序插入排序和冒泡排序分析

    冒泡排序(英语:Bubble Sort,台湾另外一种译名为:泡沫排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把...

    desperate633
  • 十大经典排序算法(代码实现),建议收藏

    兜兜转转,一晃年关将至。时间证明了一个道理,学啥忘啥,学的越快忘得越快,还不如踏踏实实写点笔记心得来的实在。

    DeROy
  • 算法刷题起航,帮你走向下一个巅峰!

    先说一个题外话,昨天收到微信公众号通知,邀请我参与个人认证。提交后公众号很快核实并通过我的申请,下面是认证后的公众号显示,欢迎去围观:

    double
  • 冒泡排序法三部曲の(一)冒泡排序原理版

    思路分析: 经典的bubble sort(冒泡排序)原理类似于气泡上升过程,到自身的密度小于上一层介质则上升,排序同理。 以数组{5,4,3,2,1}为例: 第...

    根究FPGA
  • 数据结构与算法(二)——十大排序算法

      秋招已经开启一个月了,九月份和十月份是我们秋招找工作的黄金时期。但是大多数的企业都会在笔试或者面试中会考察我们数据结构的知识点,有的会直接考查数据结构的代码...

    一计之长
  • Java 数据结构与算法系列之冒泡排序

    相信大部分同学都已经学过数据结构与算法这门课了,并且我们可能都会发现一个现象就是我们所学过的数据结构与算法类的书籍基本都是使用 C 语言来写的,好像没见过使用 ...

    compassblog
  • Java 数据结构与算法系列之冒泡排序

    相信大部分同学都已经学过数据结构与算法这门课了,并且我们可能都会发现一个现象就是我们所学过的数据结构与算法类的书籍基本都是使用 C 语言来写的,好像没见过使用 ...

    compassblog
  • 算法之旅 | 冒泡排序法

    HTML5学堂-码匠:本期继续走入算法 —— 冒泡排序法。冒泡排序算法相对简单,容易上手,稳定性也比较高, 算是一种较好理解的算法,也是面试官高频提问的算法之一...

    HTML5学堂
  • 算法系列

      算法对程序员来说是熟悉的陌生人,编过大量代码后突然被哪个问到算法是什么也有时不知从何说起,简单来说是没有好好总结过仔细分析过。大学里面导师整天苦口婆心的教导...

    欢醉
  • 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)

    本篇博客中的代码实现依然采用Swift3.0来实现。在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找、折半查找、插值查找、Fibon...

    lizelu
  • [数据结构与算法 (Kotlin 语言)] 1.冒泡排序(Bubble Sort)

    冒泡排序算法的原理是: 重复地走访过要排序的元素列,一次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重...

    一个会写诗的程序员
  • 更新!万字长文带你拿下九大排序的原理、Java 实现以及算法分析

    大家好,我是多选参数的程序锅,一个正在捣鼓操作系统、学数据结构和算法以及 Java 的失业人员。数据结构和算法我已经学了有一段日子了,最近也开始在刷 LeetC...

    syy
  • 气象编程 | 常见算法的Python实现(Github标星7.6W+)

    这个仓库用python语言实现了绝大部分算法,主要是用于教学目的,因此效率稍微低于工业界。

    气象学家
  • 七大经典、常用排序算法的原理、Java 实现以及算法分析

    大家好,我是多选参数的程序锅,一个正在 neng 操作系统、学数据结构和算法以及 Java 的硬核菜鸡。数据结构和算法是我准备新开的坑,主要是因为自己在这块确实...

    syy
  • C语言知识汇总,史上最全面总结,没有之一

    C语言中文社区
  • python算法与数据结构-冒泡排序(32)

      冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作...

    Se7eN_HOU
  • 这 3 个学数据结构和算法的网站,相信你也会喜欢的!

    而我比较特殊,我的第一印象、第二印象以至第 N 印象都觉得很难,所以为了更好的学习和理解算法,我千金一掷一下买了一堆的算法书,有图为证:

    五分钟学算法
  • 【算法入门】用Python手写五大经典排序算法,看完这篇终于懂了!

    算法作为程序员的必修课,是每位程序员必须掌握的基础。作为Python忠实爱好者,本篇将通过Python来手撕5大经典排序算法,结合例图剖析内部实现逻辑,对比每种...

    黄博的机器学习圈子

扫码关注云+社区

领取腾讯云代金券