2024年C C++最全冒泡排序(超详细图解加代码解析,5分钟看懂)(1),2024年最新【干货

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

{
	printf("%d ", arr[i]);
}
printf("\n");
return 0;

}


运行结果:


![](https://img-blog.csdnimg.cn/9c0ec1f509e546b2bc913b25c159a289.png) 代码解析:外部循环控制冒泡排序的趟数,for循环从0开始,循环sz-1(数组元素-1)次,内部循环控制每次具体的冒泡排序过程,因为每趟冒泡排序需要进行比较的次数递减,所以在循环的控制条件那再减去**i**来控制每趟冒泡排序进行的比较次数。在内部循环的循环体内,对这趟冒泡排序需要排序的元素进行遍历,小的元素放前面,大的逐次往后走,没趟冒泡结束后都能确定一个元素的位置。(sz-1)趟冒泡排序结束后,冒泡排序及就结束了。当然,如果想进行从大到小排序,只需要改变冒泡排序的判断部分,将大的元素放前面,小的元素往后走即可,代码如下:



#include<stdio.h>
int main()
{
int arr[10] = { 10,9,8,7,6,11,4,3,2,1 };
int sz = sizeof(arr) / sizeof(arr[0]);//计算出数组元素个数
int i = 0;
printf(“排序前的数组:”);
for (i = 0; i < sz; i++)
{
printf(“%d “, arr[i]);
}
printf(”\n”);
for (i = 0; i < sz - 1; i++)
{
int j = 0;
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] < arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
printf(“排序后的数组:”);
for (i = 0; i < sz; i++)
{
printf(“%d “, arr[i]);
}
printf(”\n”);
return 0;
}


运行结果:


![](https://img-blog.csdnimg.cn/c4a8cb711066440b883e0c8141dad8b5.png)


#### 4.冒泡排序的改进


由于冒泡排序的时间复杂度实在太高,所以冒泡排序还有一种优化算法,就是立一个 flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序。 



#include<stdio.h>
int main()
{
int arr[10] = { 10,9,8,7,6,11,4,3,2,1 };
int sz = sizeof(arr) / sizeof(arr[0]);//计算出数组元素个数
int i = 0;
printf(“排序前的数组:”);
for (i = 0; i < sz; i++)
{
printf(“%d “, arr[i]);
}
printf(”\n”);
int flag = 0;
for (i = 0; i < sz - 1; i++)
{
int j = 0;
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] >arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag++;
}
}
if(flag==0)
break;
}
printf(“排序后的数组:”);
for (i = 0; i < sz; i++)
{
printf(“%d “, arr[i]);
}
printf(”\n”);
return 0;
}


方法就是在每次冒泡后,检验一下到底这趟冒泡排序有没有交换顺序,如果没有的话,那么flag的值没有发生变化,就可以直接退出循环,这种方法可以略微提升一下效率。 


#### 5.实现冒泡排序函数


用函数实现冒泡排序,传参方法跟数组传参相同,具体可参考[C语言函数详解​​​​​​](https://bbs.csdn.net/topics/618668825)


里面有具体介绍数组传参的方法,这里就直接上代码



#include<stdio.h>
void Bubble_Sort(int arr[], int sz)
{
int flag = 0;
int i = 0;
for (i = 0; i < sz - 1; i++)
{
int j = 0;
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag++;
}
}
if (flag == 0)
break;
}

}
int main()
{
int arr[10] = { 10,9,8,7,6,11,4,3,2,1 };
int sz = sizeof(arr) / sizeof(arr[0]);//计算出数组元素个数
int i = 0;
printf(“排序前的数组:”);
for (i = 0; i < sz; i++)
{
printf(“%d “, arr[i]);
}
printf(”\n”);
Bubble_Sort(arr, sz);
printf(“排序后的数组:”);
for (i = 0; i < sz; i++)
{
printf(“%d “, arr[i]);
}
printf(”\n”);
return 0;

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • 21
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值