排序算法

1、插入排序
插入排序就和打扑克排序一样,从头开始,每次插入一个新的元素。从已排序部分尾部开始,若新的元素满足排序,则插入,不然原位置元素后移移位,最后插入新的元素。若原本已排序(最好情况),时间复杂度为O(n),若原为逆序(最坏情况),则为O(n^2)。
2、归并排序
归并排序就是把数组从最小个数开始(1-2-4-…)开始按照顺序归并,长度小于等于2时直接排序,长度大于2的两个数组归并时,设计一个辅助函数(此函数按照顺序依次从两个已排序的数组一端取元素,直至一个数组取完,另一个数组其余元素直接放在末尾),时间复杂度为O(nlogn)。
3、堆排序
堆:一个有序的完全二叉树,分为最大堆(根节点的值大于等于所有子节点)和最小堆。完全二叉树:一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。堆排序就是先把元素建成最大堆,然后拿掉根节点,把最后位置的元素放在根节点上,再交换根节点和左右子节点的位置使其满足最大堆的性质,依次对所有节点进行这个操作,可以完成堆排序。时间复杂度为O(nlogn)。
4、快速排序
快排是选中一个基准元素,大于这个元素的放在一边,小于的放在另外一边,通过递归调用最终排序整个数组。当输出数组有序时,快排出现最坏情况,时间复杂度O(n^2),当快排运行时划分平衡,时间复杂度为O(nlogn),平均情况更接近最好状态,平均复杂度为O(nlogn)。为了解决最坏情况,可以引入随机性:1、将数组随机重排;2、选择基准元素时随机选择(或者将基准元素的位置与要排部分的随位置的元素交换位置)。
5、冒泡排序
通过两次循环,每次确定未排序部分的最大值或最小值,时间复杂度O(n^2)。
6、计数排序
假设输入元素中的每一个都是0到k区间的整数,k为某个整数。设置一个临时存储空间[0…k],遍历输入数组,计算每个元素的个数,并接着计算小于等于此数的个数存储于临时空间中,然后再遍历输入数组根据小于等于此数的个数直接排定输入元素在输出中的位置。计数排序没有进行元素间的比较,但是要求输入都是整数,因素要开辟临时空间存储每个数的位置。时间复杂度为O(n)。
7、基数排序
基数排序将输入数字从最低有效位进行排序,接下来依次到最高有效位(若从最高有效位开始则需要每次开辟大量的临时存储空间)。时间复杂度为O(n)。
8、桶排序
假设输入满足[0,1)区间上的均匀分布,可以将区间划分为n个相同大小的子区间,称为桶。将输入分别放在各个桶中,先对每个桶进行排序,再将每个桶中的元素取出按照桶排序,可以借助数组+链表实现。时间复杂度为O(n)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值