C语言冒泡排序
程序员弘羽 人气:0今天我们来用C语言实现一下冒泡排序
首先我们来了解一下什么叫做冒泡排序,冒泡顾名思义把质量轻的气体(如二氧化碳一样)浮到水面上(如可乐中的二氧化碳),因此冒泡排序的原理就是N个元素在一个周期中,微观上依次进行两两元素的比较,小的元素就被放在前面,大的元素放在后面,以此来进行N-1个周期,来完成冒泡排序。
上文中的一个周期,即外循环,依次进行比较,即内循环。
文字看着很迷糊?没事儿,上图
如图所示,两两元素依次进行比较,小的元素往前移动,大的元素往后移动,直至元素顺序是升序的形式,即移动了 元素-1 个周期
图看明白了,还不知道该怎么写代码?这就上!
#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判断语句这里,不知道怎么实现的
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的值交换成功。
加载全部内容