算法入门第二课

算法入门第二课
归并排序,堆排序,快速排序,比较块

题目一
归并排序:
1)整体就是一个简单的归并排序,左边排好,右边排好,让其整体有序。
2)让其整体有序的过程中用了排外序的方法
3)利用master公式来求解时间复杂度
4)归并排序的实质
时间复杂度O(N*logN),额外空间复杂度O(N)

左边有序,右边有序。
两个指针,比较谁小就,把谁放在一个新的数组种。
新的空间做到整个都排好序了,在赋值到原来的数中。

问题:question
每年必出
1)小和问题
在一个数组中,每一个数左边比当前数小的数累积起来,叫做这个数组的小和。
右边比他大
归并方法比较
2)逆序对问题
在一个数组中,左边的数如果比右边的数大,则这两个数构成一个逆序对,请打印所有逆序对。

归并排序改成非递归!!!!!
任何递归后能写成非递归(迭代)的例子。
以p为单位进行比较
p=1,第一次一个数
p=2,第二次两个数
p=4,。。。。
p=2^n

题目四:
堆排序(很重要)
堆结构(数组结构,完全二叉树)
完全二叉树(要不就是满的,要不就是从左向右依次变满)

从0开始公式,(下标)
i 左孩子 2i+1
右孩子 2i+2
父节点 (i-1)/2

N个数,树高logN,扩容平均一次O(logN)
heapinsert
堆——>大根堆,在任何一棵子树中根节点是最大值
——>小根堆,

问题:
已知一个几乎的有序的数组,几乎有序是指,如果把数组排好顺序的话,
每个元素移动的距离可以不超过k,并且k相对于数组来说比较小。
请选择一个合适的排序算法针对这个数据进行排序。
题目六 : 荷兰国旗
问题一
给定一个数组arr,和一个数num,请把小于等于num的数放在数组的左边,大于num的数
放在数组的右边。要求额外空间复杂度O(1),时间复杂度O(N)

问题二
(荷兰国旗问题)分块 等于不动
给定一个数组arr,和一个数组num,请把小于num的数放在数组的左边,等于num的数
放在数组的中间,大与num的数放在数组的右边。要求额外空间复杂度O(1),时间复杂度O(N)

大于区,等于区,小于区。

题目七:
快速排序–》基于荷兰国旗问题。额外空间复杂度O(logN)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值