if(array[i] < array[bound]){
int tmp = array[i];
array[i] = array[bound];
array[bound] = tmp;
}
}
}
}
性能分析:
- 时间复杂度
O(N^2)
- 空间复杂度
O(1)
堆排序-原理(不稳定)
**基本原理也是选择排序,只是不在使用遍历的方式查找无序区间的最大的数,而是通过堆来选择无序区间的最大的数。
PS:排升序要建大堆;排降序要建小堆。**
实现:
//堆排序
public void heapSort(int[] array) {
createHeap(array);
//直接将数组长度减一,下次向下调整对最后一个元素不做处理,heapSize等于0的时候就只有一个元素为排序
for (int heapSize = array.length - 1; heapSize > 0; heapSize–) {
int tmp = array[0];
array[0] = array[heapSize];
array[heapSize] = tmp;
shiftDown(array,heapSize,0);
}
}
private void createHeap(int[] array) {
//第一次减一是得到最后一个元素,在减一是为了找它的双亲结点
for (int i = (array.length -1 - 1) / 2; i >= 0 ; i–) {
shiftDown(array,array.length,i);
}
}
private void shiftDown(int[] array, int size, int index) {
int parent = index;
int child = 2 * parent + 1;
while (child < size) {
if(child + 1 < size && array[child + 1] > array[ child]) {
child ++;
}
if(array[child] > array[parent]) {
int tmp = array[child];
array[child] = array[parent];
array[parent] = tmp;
}else {
break;
}
parent = child;
child = 2 * parent + 1;
}
}
性能分析:
- 时间复杂度
O(NlogN)
- 空间复杂度
O(1)
冒泡排序- 原理(稳定)
在无序区间,通过相邻数的比较,将最大的数冒泡到无序区间的最后,持续这个过程,直到数组整体有序。
实现:
//冒泡排序,从前到后
public void bubbleSort(int[] array) {
for (int bound = 0; bound < array.length; bound++) {
//最后一个元素不用排序所以减一,已排好的bound个也不用对其进行比较处理
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!