排序的概念以及算法分析(一)

排序:排序就是重新排列表中元素,使表中元素满足关键字有序的过程。

排序分为两大模块

一:  外部排序

二:内部排序(重点)

注解:

1.排序算法的评价指标:1.时间复杂度  2.空间复杂度

2.排序算法的稳定性:若待排表中两个元素Ri和Rj对应的关键字相同,且Ri在Rj前。若使用某一算法进行排序后,Ri和Rj相对位置不变则称这个排序算法是稳定的。否则排序算法不稳定。

1.插入排序:每次将一个待排记录按关键字大小插入到前面已排好的序列中,直到全部记录插入完成。(算法稳定)

由直接插入排序引出三种重要的算法:1.直接插入排序 2.折半插入排序 3.希尔排序

1.直接插入排序:

空间复杂度O(1)(主要定义几个变量来进行对比和交换)

时间复杂度:主要开销来自于关键字对比以及移动元素的过程。若有n个元素需要n-1趟处理(可理解为每一趟插入一个元素,第一个元素默认在队列头部,故剩余元素n-1,故需要n-1趟处理)。

最好情况:对比n-1次关键字,不需要移动元素(此时表中有序排序)此时为最好时间复杂度

O(n)

最坏情况:原表逆序排序,每次都需要从尾部对比元素,并且移动元素,直至到头元素为止。此时时间复杂度为:O(n^2)(对比次数从1一直加到n-1等差数列求和可得)。

平均时间复杂度:O(n^2)

是否稳定:显然根据直接插入排序的算法原理是稳定的

2.折半插入排序:

在前面已有序的子表中用折半查找找到需要插入的位置,再移动元素。

比起直接插入排序比较次数变少了,但移动元素次数仍旧没变,平均时间复杂度整体来看依旧是

O(n^2)

上述两种算法可以链结构实现:用链表虽然移动元素的次数变少了,但是比较次数的平均时间复杂度依旧是O(n^2)

3.希尔排序:

追求表中元素部分有序直到全局有序。最好情况下原本就有序,比较好情况下基本有序。

算法思想:将待排序表以d为单位增量进行分割成若干子表。对各个子表分别进行直接插入排序。缩小增量d直至d=1为止。

空间复杂度:O(1),主要是定义变量之间的比较与交换

时间复杂度:暂时无法用数学证明其具体时间复杂度。

稳定性:不稳定。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

绞尽脑汁想个网名

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值