常见的排序算法(总结用,无介绍)

目录

一.插入排序

1.直接插入排序

        特性:

2.希尔排序

        特性:

        gap的取值:

二.选择排序

1.选择排序

        特性:

2.堆排序

        特性:

        注意点:

三.交换排序

1.冒泡排序

        特性:

2.快速排序

        特性:

        注意点:

四.归并排序

1.归并排序

        特性:

        注意点:

五.非比较排序

1.计数排序(哈希的变形应用)

        特性:

        注意点:

六.排序总结

七.结语


一.插入排序

1.直接插入排序

特性:

1. 元素集合越接近有序,直接插入排序算法的时间效率越高
2. 时间复杂度:O(N^2)
3. 空间复杂度:O(1),它是一种稳定的排序算法
4. 稳定性:稳定         

2.希尔排序

特性:

1. 希尔排序是对直接插入排序的优化。
2. 当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。
3. 希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在好些书中给出的希尔排序的时间复杂度都不固定

4. 稳定性: 稳定

gap的取值:

1.shell提出:          gap = gap / 2;

2.Knuth提出:        gap = gap / 3 + 1;


二.选择排序

1.选择排序

特性:

1. 容易理解,但效率低。实际中很少使用
2. 时间复杂度:O(N^2)
3. 空间复杂度:O(1)
4. 稳定性:不稳定

2.堆排序

特性:

1. 堆排序使用堆来选数,效率就高了很多。
2. 时间复杂度:O(N*logN)
3. 空间复杂度:O(1)
4. 稳定性:不稳定

注意点:

1.排升序要建大堆,排降序建小堆。

2.可以用来解决TOP10问题,也就是排行榜问题。

3.堆的创建是从最后一个非叶子节点开始向下调整。

4.堆的删除是第一个节点向下调整。

5.堆的插入是最后一个节点向上调整。

三.交换排序

1.冒泡排序

特性:

1. 时间复杂度:O(N^2)
2. 空间复杂度:O(1)
3. 稳定性:稳定

2.快速排序

特性:

1. 时间复杂度:O(N*logN)
2. 空间复杂度:O(logN)
3. 稳定性:不稳定

注意点:

1.有三种快速排序的单趟排序

a.hoare法

        两个指针分别从首尾开始,找小于目标值和大于目标值的进行交换。

b.挖坑法

        与hoare法类似,不过是将某一方作为坑,最开始把key所在的位置作为坑。

c.前后指针法

        初始的时候,prev指针指向序列开头,cur指向prev的下一个位置,cur查找到第一个大于(小于)key的值,然后和prev交换,prev++,此时开始,prev之前都是大于(小于)key的值了。

2.优化

        1. 三数取中法选key(三数取中)
        2. 递归到小的子区间时,可以考虑使用插入排序(小区间优化)

四.归并排序

1.归并排序

特性:

1. 归并的缺点在于需要O(N)的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题。
2. 时间复杂度:O(N*logN)
3. 空间复杂度:O(N)
4. 稳定性:稳定

注意点:

1.辅助空间

        主要用于处理两个有序数组合并成一个有序数组的问题(类似部分oj题目)。

2.应用

        可使用在磁盘中,或是不同文件中的排序。

五.非比较排序

1.计数排序(哈希的变形应用)

特性:

1. 计数排序在数据范围集中时,效率很高,但是适用范围及场景有限。
2. 时间复杂度:O(MAX(N,范围))
3. 空间复杂度:O(范围)
4. 稳定性:稳定

注意点:

1.步骤

        a.对数据进行hash统计

        b.从最小(大)的元素开始根据hash统计的数据个数进行打印。

六.排序总结

排序方法平均情况最好情况最坏情况辅助空间稳定性    
冒泡排序O(n^2)O(n)O(n^2)O(1)稳定
选择排序O(n^2)O(n^2)O(n^2)O(1)不稳定
插入排序O(n^2)O(n)O(n^2)O(1)稳定
希尔排序O(n*logn)~O(n^2)O(n^1.3)O(n^2)O(1)不稳定
堆排序O(n*logn)O(n*logn)O(n*logn)O(1)不稳定
归并排序O(n*logn)O(n*logn)O(n*logn)O(n)稳定
快速排序O(n*logn)O(n*logn)O(n^2)O(logn)~O(n)不稳定

七.结语

        算法总结+个人认为的注意点。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值