网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
算法步骤:
- 从数组中第⼀个数开始,依次与下⼀个数⽐较并次交换⽐⾃⼰⼩的数,直到最后⼀个数。如果发⽣交换,则继续下⾯的步骤,如果未
发⽣交换,则数组有序,排序结束,此时时间复杂度为O(n);- 每⼀轮”冒泡”结束后,最⼤的数将出现在乱序数列的最后⼀位。重复步骤(1)。
稳定性:稳定排序
复杂度:
时间复杂度: O(n)⾄O(n2),平均时间复杂度为O(n2)。
最好的情况:如果待排序数据序列为正序,则⼀趟冒泡就可完成排序,排序码的⽐较次数为n-1次,且没有移动,时间复杂度为O(n)。
最坏的情况:如果待排序数据序列为逆序,则冒泡排序需要n-1次趟起泡,每趟进⾏n-i次排序码的⽐较和移动,即⽐较和移动次数均达到最⼤值:
⽐较次数:Cmax=∑i=1n−1(n−i)=n(n−1)/2=O(n2)
移动次数等于⽐较次数,因此最坏时间复杂度为O(n2)。
⽰例代码:
public class BubleSort {
public static void main(String[] args) {
int[] arr = { 3, 5, 2, 1, 4 };
bubbleSort(arr);
for (int i : arr) {
System.out.print(i + " ");
}
}
public static void bubbleSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
// 外层循环控制遍历次数
for (int j = 0; j < arr.length - 1 - i; j++) {
// 内层循环控制每次遍历比较的位置
if (arr[j] > arr[j + 1]) {
// 如果相邻元素顺序错误,交换它们的位置
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
}
![img](https://img-blog.csdnimg.cn/img_convert/219a393c6800b4b6752b959cc9818968.png)
![img](https://img-blog.csdnimg.cn/img_convert/18cf0b60d56c54bff742c324b7c539eb.png)
![img](https://img-blog.csdnimg.cn/img_convert/02b31608b4728a520971581957acfb77.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**
线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**