11 2018 档案

摘要:堆排序是本博文介绍的几个排序算法中唯一引入了抽象数据结构(ADT)的排序方式。要完全理解堆排序的实现方式,首先需要理解堆这种数据结构的实现方式。 堆 提到堆,首先会引入优先队列(Priority Queues)的概念,优先队列不同于队列,队列是FIFO,在优先级队列中,队列内元素的逻辑顺序由其优先级 阅读全文
posted @ 2018-11-19 20:31 Jeffrey_Yang 阅读(379) 评论(0) 推荐(0)
摘要:MIT一直是免费公开课的传播者和引领者,旨在为全世界各地的人们提供免费可在线观看的大学课程。将精英大学的课程搬到网上,会造福整个人类。 这一分类博文将跟随MIT的6006课程《Introduction to Algorithms》,实现课程中所讲到的算法。 首先讲到的是算法思想,如何通过将复杂问题, 阅读全文
posted @ 2018-11-07 22:42 Jeffrey_Yang 阅读(1194) 评论(0) 推荐(0)
摘要:问题描述 Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would ha 阅读全文
posted @ 2018-11-05 22:05 Jeffrey_Yang 阅读(125) 评论(0) 推荐(0)
摘要:快速排序,和归并排序一样,采用分而治之和递归的方式。 原理 快速排序的步骤为: 1. 从待排序列表中选择一个轴(piovt:一般默认为选择index为0的元素,改进快速排序算法一般在轴的选择上作文章)。 2. 划分大小区域(partitioning):对数组进行重新排序,使得值小于pivot的所有元 阅读全文
posted @ 2018-11-04 14:12 Jeffrey_Yang 阅读(287) 评论(0) 推荐(0)
摘要:定义 归并排序是一种递归算法,可以将列表连续分成两半。 如果列表为空或只有一个元素,则按定义(基本情况)已是排序列表。 如果列表有多个元素,我们拆分列表并在两半上递归调用合并排序。 一旦这两半部分排序完毕,就会执行称为合并的基本操作。 合并是获取两个较小的排序列表并将它们组合成一个排序的新列表的过程 阅读全文
posted @ 2018-11-03 23:14 Jeffrey_Yang 阅读(1191) 评论(0) 推荐(0)
摘要:希尔排序,又称“缩小增量排序”,通过将原始列表分成若干个子列表来改进插入排序,每个子列表使用插入排序。 如何选择子列表的形式是希尔排序的关键。希尔排序使用增量i(有时又成为间隙gap)来创建子列表,而不是将原始列表连续的切分。这种方式可以将相隔较远,较为分散的元素通过增量划分到一组,改进了一次插入排 阅读全文
posted @ 2018-11-03 18:00 Jeffrey_Yang 阅读(587) 评论(0) 推荐(0)
摘要:插入排序,故名思议,将数据插入到合适的位置,形成子排序序列。遍历序列时,从第二个元素开始(第一个默认排序),依次与之前排序好的子序列进行比较,由近及远。如上图。每进行一次插入排序,子排序序列增长一个长度。 代码实现如下: 遍历时,从第二个元素开始,若当前元素小于子排序序列里的最大值(子排序序列为0到 阅读全文
posted @ 2018-11-01 23:07 Jeffrey_Yang 阅读(193) 评论(0) 推荐(0)
摘要:选择排序算是对冒泡排序的一种改进:假设有n个待排列的数据,在第一轮遍历中,仍进行n 1次比较,遍历的时候用当前数与当前获得的最大数进行比较,而不是相邻的数据进行比较,且仅进行一次数据交换。而冒泡排序在每一次比较的过程中,发现数据顺序不一致就交换,数据交换的次数更多。选择排序只需要用标记记住每一轮的最 阅读全文
posted @ 2018-11-01 22:03 Jeffrey_Yang 阅读(248) 评论(0) 推荐(0)