算法学习 week3

Coursera算法part1课程学习记录和回顾。
第三周课程 主要学习了合并排序(MergeSort)和快速排序(QuickSort)
一点体会:课程是很早就过完了,中间假期没有及时整理,拖延了,过去的越久,很多都遗忘了,回头复习整理时,又花了很长一段时间,也许以后过了很久可能还是会淡忘这些基础吧,说实话,有些基础算法的实现,把自己关起来,什么也不参考,也可能写不对,写不出来。。。

1. 合并排序(MergeSort)

  • 简介
    • 将排序元素分成两半
    • 递归地分割子部分
    • 合并子部分成有序
  • 合并两个有序数组的实现思路说明
    利用辅助数组存放要合并的排序元素,当左半部分有序元素都已放置完时,直接放置剩余右半部分元素;当右半部分有序元素都已放置完时,直接放置剩余左半剩余部分元素;当前左半部分所取元素小于右半部分所取元素,放置左半部分所取元素,否则放置右半所取元素

2. 快速排序(QuickSort)

  • 简介
    • 随机化元素数组顺序
    • 将数组分割成两部分,使得其中一个元素在整个数组中的位置正确(元素左边的都比之小,元素右边的都比之大)
    • 递归地处理分割后的部分
  • 分割处理的实现说明
    取第一个元素为最终分割出的元素,从左边开始找出左侧部分需要交换位置的元素(比之大的元素),从右边开始找出右侧部分需要交换位置的元素(比之小的元素),将二者交换,如此循环处理,直到左右都处理完(左边边界与右边边界交叉);将第一个元素与右边界元素进行交换,换到最终分割的位置

3. 排序算法的特性对比

算法学习 week3_第1张图片
image.png

4. 其他说明

课程所学的是基础的排序算法,在实际系统应用中,排序算法的实现存在不同程度的优化处理,如快速排序中重复元素的考虑 3-parition(小,等,大),合并排序和快速排序中待排序的元素较少时,利用插入排序等等

5. 课程作业

第三周的课程作业是从给定的一组二维点中找出所有4个或以上的点在一条线上的情况,最终完成情况也不是很理想,失败的用例场景中存在越界错误,耗时性能用例也是调试了很久才好一些(想不起来当时影响性能卡住的地方)

Correctness:  37/41 tests passed
Memory:       1/1 tests passed
Timing:       25/41 tests passed

Aggregate score: 86.34%
算法学习 week3_第2张图片
image.png

你可能感兴趣的:(算法学习 week3)