Java~常见排序之选择排序、堆排序、冒泡排序

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开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值