八大排序算法(理论和动态图)

排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或 递减的排列起来的操作。

一、冒泡排序

从第一个元素开始,每次比较相邻元素,如果元素顺序不正确,则进行交换,否则,比较下一对相邻元素。重复上述过程,直到所有元素都有序。

冒泡排序每次都可以将一个最值排到队尾,像水里冒泡泡一样,大的先浮上来,所以叫冒泡排序。
冒泡排序

二、选择排序

选择数组最小的元素,与数组第一个元素交换,然后选择剩余的数组元素中最小的元素,与数组第二个元素交换,一直重复上述操作,直到数组有序。

选出第一小的与第一位交换,选出第二小的与第二位交换,直到全部有序。

选择排序

三、快速排序

先选一个元素作为基点,将其余元素比基点小的放左边,比基点大的放右边,然后分别对左边和右边重复以上操作,直到所有元素有序。快速排序

四、归并排序

假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到[n/2]个长度为2或1的有序子序列,再两两归并,如此重复,直到得到一个长度为n的有序序列为止。归并排序

五、堆排序

以从小到大排序为例,先建立大顶堆,然后取出堆顶元素(堆顶元素一定是当前堆中的最大值),将堆的最后一个元素放置到堆顶。这时,并不是一个大顶堆,然后调整堆使其成为大顶堆,然后将堆顶元素取出,重复上述过程,直到最后一个元素。堆排序

六、直接插入排序

假设元素存储在数组 g 中,共有 n 个元素,依次遍历每一个元素,将元素 g[i] 按大小顺序插入到 0 ~ i 的位置。一直重复插入,直到第n个元素。

将第一个元素看作有序表,遍历2~n号元素,依次插入已构成的有序表的恰当位置,使之成为新的有序表。
直接插入排序

七、希尔排序

通过设置一个增量n,大小为数组长度的一半,将间隔为n的元素视作一个组,然后对每个组内部的元素进行插入排序,然后再将增量n缩小为一半,再次进行分组插入排序,直到增量为1,即所有元素有序。

希尔排序是插入排序的改进版本,弥补了插入排序在某些情况下的缺点。
希尔排序

八、基数排序

按照数字的位数进行排序,即:先排个位,再排十位,再排百位……。有10个桶,标号为0~9。排序个位时,按照个位值的不同,分配到10个桶中(0分配到0号桶,1分配到1号桶,以此类推),然后将分配后的结果收集,这时候数组是按照个位排序的。继续按照十位重复上述排序过程,一直排序完所有的位数(取决于数组中最大数的位数)。
基数排序

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朋友叫我小马

不需要打赏哟!谢谢阅读!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值