八大排序算法及Java实现(内部排序)

排序算法

  • 内部排序算法:需要排序的数据可以一次全部加载到内存中
  • 外部排序算法:需要排序的数据数量太过庞大,不能一次性全部加载到内存中

在这里插入图片描述
在这里插入图片描述

十个排序算法的动图解释:https://www.cnblogs.com/onepixel/articles/7674659.html

速度从快到慢
基数排序 > 快速排序 > 归并排序> 希尔排序(移动法)> 堆排序 > 简单选择 > 直接插入 > 冒泡 > 希尔排序(交换法)


1.冒泡排序(稳定)

每次从头开始到未排好序部分的末尾,依次比较相邻数据,如果与要求的顺序逆序,则交换,直到某一次循环中没有发生交换结束

  • n-1次外循环
  • 每次循环“末尾”数据排好,即尾部为排好序的部分
  • 每次内循环比上一次减1
    在这里插入图片描述

2.简单选择算法(不稳定)

每次选出剩余未排序数据中最小/大的数据,然后与未排好序的首个数据进行交换

  • n次外循环
  • 首部为排好序的部分
  • 每次内循环减1
    在这里插入图片描述

一次外循环最多交换一次数据,选择的过程只是记录索引位置

3.直接插入排序(稳定)

将排序的数组看成有序部分和无序部分,从无序部分中拿出一个数直接插入到有序部分合适的位置

  • 首次将第一个数据看成有序部分,剩余为无序部分
  • n-1次外循环
    在这里插入图片描述

4.希尔排序(不稳定)

分组排序,第一次循环是2个数据一组,第二次循环为4个数据一组,第三次循环为8个数据一组……依此类推直到全部个数为一组,使得组内元素为有序。

  • 第i次循环共有n/(2^i)个组
  • 每组数据与相邻数据的下标差为n/(2^i),即组数
  • 组内采用直接移动法或者交换法
    在这里插入图片描述
    在这里插入图片描述

5.快速排序(不稳定)

  • 以一个数为基准,把所有比它小的放在它的左边,所有比它大的都放在它的右边
    在这里插入图片描述

6.归并排序(稳定)

  • 分治算法
    在这里插入图片描述
    分:一直拆分直到单个一个元素是一个组
    治:然后再两两合并(合并有序序列为一个大的有序序列),合并的时候同时排序,直到所有元素合为一个组
  • n个数据合并n-1次
    在这里插入图片描述

7.基数排序(稳定)

  • 空间换时间
  • 将所有的数排齐即等位数,高位不够补0,依次比较每一位进行排序
  • 从个位开始比较,放入0——9的桶里,个位是几就放入对应编号的桶里,全部放入后,然后依次从0——9桶中拿出数据覆盖原来的数组,直到全部位数都比较完成
    在这里插入图片描述

8.堆排序(稳定)

  • 升序排序采用大顶堆;降序排序采用小顶
  • 尾部逐渐有序
  • 将无序数排成大顶堆,交换栈顶元素与无序区末尾元素,重新调整为大顶堆,然后再交换直到全部有序

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值