今天我们来用C语言实现一下冒泡排序
首先我们来了解一下什么叫做冒泡排序,冒泡顾名思义把质量轻的气体(如二氧化碳一样)浮到水面上(如可乐中的二氧化碳),因此冒泡排序的原理就是N个元素在一个周期中,微观上依次进行两两元素的比较,小的元素就被放在前面,大的元素放在后面,以此来进行N-1个周期,来完成冒泡排序。
上文中的一个周期,即外循环,依次进行比较,即内循环。
文字看着很迷糊?没事儿,上图
如图所示,两两元素依次进行比较,小的元素往前移动,大的元素往后移动,直至元素顺序是升序的形式,即移动了 元素-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