0


C语言经典练习题(2)——“冒泡排序(Bubble Sort)“

C语言趣味练习题——冒泡排序


文章目录


一、冒泡排序介绍

冒泡排序(Bubble Sort),也称为沉降排序,之所以称其为冒泡排序是因为算法中会把相对较小(大)的数据像水中的气泡一样逐渐上升到数组的顶端。同时,较大(小)的数据也会一步步沉到数组的底端,这个处理过程需要在整个数组范围内反复执行多遍。每一遍执行时,比较相邻的两个元素,并判断是否交换位置。


二、图文解释原理

在这里插入图片描述
纯手工制图哦!

三、代码实现

1.代码示例

// 冒泡排序bubble sortvoidBubble_sort(int a[],int sz){int i =0, j =0;for( i =0; i < sz -1; i++)// 外层循环 sz-1 次{for(j =0; j < sz -1- i; j++)// 内层循环{if(a[j]> a[j +1]){int temp = a[j];
                    a[j]= a[j +1];
                    a[j +1]= temp;}}}}// 打印数组函数voidprint(int arr[],int sz){int i =0;for( i =0; i < sz; i++){printf("%d ", arr[i]);}printf("\n");}intmain(){int i =0;int arr[10]={2,1,8,6,9,7,3,5,4,0};int sz =sizeof(arr)/sizeof(arr[0]);printf("请输入数据:\n");for( i =0; i < sz; i++){scanf("%d", arr + i);}//print(arr, sz); // 打印一遍排序前数组数据Bubble_sort(arr, sz);print(arr, sz);return0;}

2. 代码解析

代码解析:对数组中的 sz(sz为数组元素个数) 个数执行 sz -1 遍依次操作,在对每一个的外层循环时,对数组中未排序好的元素进行如下操作:两两相邻的元素进行比较,若下标为 j 的元素大于下标为 j + 1 的元素时,则交换其位置,每完成一次判断并交换才算作一次冒泡排序完成,因此经过 sz - 1 遍操作后就可以将全部数从小到大排好顺序了。

解释:内层循环 j < sz - i - 1:因为数组中一共是sz个元素 j 是从0开始,第一次需要作9次比较才能将最大的数字交换到最后,那么数组下标就是 0~ 8 然后与 下标为0(+1)~8(+1)比大小,所以当 arr[j] 为 sz - 1 - 1 == 8的时候 就已经比完了,以此类推第二轮sz - 2 - 1…


总结

冒泡排序总的来说,易于理解,代码实现简易不复杂,但是唯一不足的是运行效率较低,因为在每一次交换中,一个元素只能一个个的向后先做判断后交换,如果在一个数组元素较大的数组中,无疑是一个缺点!所以小伙伴们还能不能想出更优解的方法呢?希望与大家共同进步!
觉得有帮助的小伙伴点个赞吧👍


本文转载自: https://blog.csdn.net/m0_56742126/article/details/125948873
版权归原作者 it_NunU 所有, 如有侵权,请联系我们删除。

“C语言经典练习题(2)&mdash;&mdash;&ldquo;冒泡排序(Bubble Sort)&ldquo;”的评论:

还没有评论