服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言冒泡排序算法代码详解

C语言冒泡排序算法代码详解

2022-08-31 16:28程序员弘羽 C/C++

大家好,本篇文章主要讲的是C语言冒泡排序算法代码详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下

今天我们来用C语言实现一下冒泡排序

首先我们来了解一下什么叫做冒泡排序,冒泡顾名思义把质量轻的气体(如二氧化碳一样)浮到水面上(如可乐中的二氧化碳),因此冒泡排序的原理就是N个元素在一个周期中,微观上依次进行两两元素的比较,小的元素就被放在前面,大的元素放在后面,以此来进行N-1个周期,来完成冒泡排序。

上文中的一个周期,即外循环,依次进行比较,即内循环。

文字看着很迷糊?没事儿,上图

C语言冒泡排序算法代码详解

如图所示,两两元素依次进行比较,小的元素往前移动,大的元素往后移动,直至元素顺序是升序的形式,即移动了 元素-1 个周期

图看明白了,还不知道该怎么写代码?这就上!

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
#include <string.h>
 
int main()
{
    int n[9] = { 3,1,6,5,9,7,8,2,4 };
    int nums = sizeof(n) / sizeof(int), temp, i;
    for (i = 1; i < nums ; i++) {//外层循环,表示来回多少次
        for (int j = nums - 1; j >= i; j--)  //内层循环,表示一次来回会对比多少次,注意数组下标,不要越界
        {                      
            printf("目前i的值:%d ", i);
            printf("目前j的值:%d ", j);
            if (n[j-1] > n[j]) {
                temp = n[j-1];
                n[j-1] = n[j];
                n[j] = temp;
            }
            printf("该次交换后的结果:");
            for (int a = 0; a < nums; a++) {
                printf("%d  ", n[a]);
            }
            printf("\n\n");
        }
    }
    printf("最终交换后的结果:");
    for (int a = 0; a < nums; a++) {
        printf("%d  ", n[a]);
    }
    printf("\n");
}

代码同时把每次循环的结果都进行了输出,方便观察排序的结果,同时也可以和图片进行比较

这里对代码一些小细节进行一下说明

首先就是sizeof()函数,这个函数使用时必须要引用头文件string.h,他的用法就是计算内容的字节,int型占4个字节 n数组有9个int型的元素,所以占36个字节,除以int型的4字节,就是他的数组元素个数。

有人会好奇,明明写了一个n[9]了,为什么要多此一举写一个这个计算表达式,其实在很多时候给的数组都不会是这么简单明了的,所以我们最好通过计算来算得数组元素的个数。

第二个问题就是,有些小白会卡在这个if判断语句这里,不知道怎么实现的

?
1
2
3
4
5
if (n[j-1] > n[j]) {
                temp = n[j-1];
                n[j-1] = n[j];
                n[j] = temp;
            }

其实很简单,就是找一个中间值。我们在这里假设要交换a,b两数的值,我们这里就要设置一个中间值,通常设置为temp,把a的值赋值到temp上(然后现在就相当于有两个a,此刻我们改变a本身的值,temp的值也不会改变),此时我们就可以把b的值赋予到a上面,这一步b对a的值传输已经结束,最后一步就是把temp的值赋予到b上。大功告成,a,b的值交换成功。

到此这篇关于C语言冒泡排序算法代码详解的文章就介绍到这了,更多相关C语言冒泡排序内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_45821611/article/details/122557893

延伸 · 阅读

精彩推荐
  • C/C++C++静态成员函数不能调用非静态成员变量(详解)

    C++静态成员函数不能调用非静态成员变量(详解)

    下面小编就为大家带来一篇C++静态成员函数不能调用非静态成员变量(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过...

    C++教程网11382021-04-23
  • C/C++C语言return, exit, abort的区别

    C语言return, exit, abort的区别

    这篇文章主要介绍了C语言return, exit, abort的区别,一般情况下,在C语言中退出一个程序用return,如果在main函数中,return在清理局部对象之后,会调用exit函...

    微小冷7202022-08-07
  • C/C++C++代码实现贪吃蛇小游戏

    C++代码实现贪吃蛇小游戏

    这篇文章主要为大家详细介绍了C++贪吃蛇小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    木笔#15322021-10-07
  • C/C++C++程序中启动线程的方法

    C++程序中启动线程的方法

    这篇文章主要介绍了C++程序中启动线程的方法,作者针对C++11版本中的一些新特性进行了解说,需要的朋友可以参考下...

    C++教程网12092021-03-02
  • C/C++详细聊聊c语言中的缓冲区问题

    详细聊聊c语言中的缓冲区问题

    缓冲区又称为缓存,它是内存空间的一部分,也就是说在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做...

    厚积薄发10942022-02-28
  • C/C++OpenCV实现霍夫变换直线检测

    OpenCV实现霍夫变换直线检测

    这篇文章主要为大家详细介绍了OpenCV实现霍夫变换直线检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    我有一個夢想6082021-11-17
  • C/C++C++用new创建对象和不用new创建对象的区别解析

    C++用new创建对象和不用new创建对象的区别解析

    在C++用new创建对象和不用new创建对象是有区别的,不知你是否清楚的了解它们到底有什么样的区别呢?下面小编就用示例来告诉大家吧,需要的朋友可以过...

    C++教程网2752020-12-20
  • C/C++C++优先队列用法案例详解

    C++优先队列用法案例详解

    这篇文章主要介绍了C++优先队列用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    华山青竹12092021-12-14