冒泡排序、选择排序、插入排序

本文详细介绍了三种基础排序算法:冒泡排序的通过相邻元素比较并交换位置,选择排序每次选取未排序部分的最大/小元素,插入排序通过前后对比插入位置。分别阐述了它们的实现、优缺点,以及针对特定场景的优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

冒泡排序

思路

  将相邻的两个元素进行比较,然后将较小的元素放在左边,将较大的元素放在右边。一直重复,直到排序完毕。

实现(JAVA)

在这里插入图片描述

优缺点

  每一趟排序后都会将最大的元素排在最右边,所以之后每趟排序都会减少一个待排元素

  对n个元素进行排序,第 i 趟需要比较n-i次,共需要n-1趟排序

稳定性:稳定(如果a原本在b前面,且a = b,排序后a仍然在b前面)

时间复杂度最好情况为O(n),即全是正序的情况下。   最坏情况为O(n2),即全是倒序的情况下

空间复杂度为O(1)

优化

先判断数组内的元素是否有序,如果数组内的元素本身有序,则不进行排序。
在这里插入图片描述

选择排序

思路

  每次遍历所有待排元素,选择其中最大/最小的元素,将其放在排序序列的起始位置。然后,再次遍历所有待排的剩余元素,选择其中最大/最小的元素,将其放在已排序列的末尾。重复此操作,直到排序完成。

实现(JAVA)

在这里插入图片描述

优缺点

  一轮比较只需要交换一次位置。n个元素进行排序共需要交换n-1次

稳定性:不稳定(如果原本a在b的前面,且a = b,排序后a可能出现在b的后面)

时间复杂度为O(n2)

空间复杂度为O(1)

插入排序

思路

  从第一个元素开始,默认第一个元素已经有序。
  取出下一个元素,与前面已经排序的元素从后向前进行比较,如果此元素小于被比较的元素(已排序),则将被比较的元素向后移动一个位置。
  直到找到此元素大于被比较的元素(已排序)的位置,将其插入到该位置。
  重复此操作,直到排序完成。

实现(JAVA)

在这里插入图片描述

优缺点

相比于冒泡排序和选择排序更快

稳定性:稳定

时间复杂度最好情况为O(n),最坏情况为O(n2)。

空间复杂度为O(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值