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…
总结
冒泡排序总的来说,易于理解,代码实现简易不复杂,但是唯一不足的是运行效率较低,因为在每一次交换中,一个元素只能一个个的向后先做判断后交换,如果在一个数组元素较大的数组中,无疑是一个缺点!所以小伙伴们还能不能想出更优解的方法呢?希望与大家共同进步!
觉得有帮助的小伙伴点个赞吧👍
版权归原作者 it_NunU 所有, 如有侵权,请联系我们删除。