小工具知识网

当前位置: 首页 > 行业知识 > 轻松拿捏C语言——冒泡排序及优化

行业知识

轻松拿捏C语言——冒泡排序及优化

2026-11-11 13:59:09 来源:互联网转载

欢迎关注 轻松拿捏C语言系列,来和 小哇 一起进步!✊ 


今天我学习到一个优化版的冒泡排序,想和大家一起分享一下。

我们先来了解一下冒泡排序

按照这个规则,这一趟排序下来就把最大的值排在了最右边,后面就不需要再调整它,然后我们现在只需要再来对前9个数进行排序。10个数排序,我们只需要比较9趟(最后1趟比较2个数,只需要比较1次,所以n个数排序只用比较 n-1 趟);每比较完1趟,下一次排序比较时 就会少比一个数

所以index.php/tags-653.html" >可以写出冒泡排序代码

#includevoid Print(int arr[], int sz)//定义了一个打印数组的函数{for (int i = 0; i  arr[j + 1])//交换{temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}Print(arr, sz);//调用函数return 0;}

运行结果 

这里我们虽然成功地进行了升序的排序,但这个代码在面对有些情况有些繁琐,比如:

int arr[10] = {0,1,2,3,4,5,6,7,8,9} 

这本就是一个排列好了的数组,如果我们对它进行一趟排序之后就会发现没有一对数字会进行交换(换言之它已经排列好了),所以我们就不用再继续进行冒泡排序了,否则程序仍会按我们上面的代码来进行第二趟、第三趟等等的排序 。

这种时候我们就可以优化代码

#includevoid Print(int arr[], int sz){for (int i = 0; i  arr[j + 1])//交换{flag = 0;//还为无序temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}if (flag == 1)break;}Print(arr, sz);return 0;}

优化之后的代码如果还能进入if语句进行交换,表明数组的元素间还是无序的(没有按照规则排列),就给flag赋值0;直到flag为1的时候即元素已经是有序排列的了,就会执行break语句跳出循环。


本次的内容结束啦,欢迎有问题评论区讨论。

希望大家能够三连支持,你们的鼓励是我前进的动力

谢谢观看!

上一篇:怎么获得申请服务器信息?

下一篇:物理服务器怎么关?