1.2 希尔排序 希尔排序属于插入排序的一种,是直接插入排序的优化,其主要思想是:由于在序列基本有序的情况下,直接插入排序的效率很高,那么,我们引入一个增量incre,把以incre为间隔的元素做一次直接插入排序,使其基本有序;随后,incre慢慢减小,继续做上述直接插入排序,最后incre变成1, ...
分类:
编程语言 时间:
2018-01-26 22:52:10
阅读次数:
210
前段时间Java学了,数据结构与算法看了,机器学习也了解了一点,还装上Ubuntu了解了Linux。接受的东西太多太杂,需要梳理一下。 首先是最重要的数据结构和算法,无论以后搞什么,只要是计算机方面的,都是在这基础上开展的,所以我前段时间着重花了很多时间在上面,接下来也还要继续,这点是要明确的。机器 ...
分类:
编程语言 时间:
2018-01-25 23:06:00
阅读次数:
204
完全二叉树叫做堆。 完全二叉树就是最后一个节点之前不允许有不满的节点,就是不允许有空洞。 可以使用数组来做完全二叉树(堆)。 堆分为大顶堆和小顶堆。大顶堆就是根节点上的数字是最大的,小顶堆就是根节点上的数字是最小的堆。 在堆里面的操作包括两种:插入新的节点和删除根节点。 插入新节点的操作时向上渗透。 ...
分类:
编程语言 时间:
2018-01-25 00:19:47
阅读次数:
166
【快速排序】: 利用递归算法, 首先选择一个基准值(pivot value),这里我们选列表的第一个值作为例。这个基准值的作用是协助列表的分割。 这个基准值在正序列表中的正确位置,我们称之为分割点(split point)。这个点用于将列表分成两个部分,然后再对每个部分做快速排序。 分割过程如下: ...
分类:
编程语言 时间:
2018-01-21 14:47:24
阅读次数:
176
【归并排序】这里我们利用递归算法不断地将列表一分为二,base case就是列表中没有元素或者只剩一个元素,因为此时这个子列表必然是正序的;然后再逐步把两个排序完成的子列表合并成一个新的正序列表,直到所有元素排序完毕。 【示意图】这是一个从下至上的过程(Bottom-Up) 将列表不断从中间分成两个 ...
分类:
编程语言 时间:
2018-01-21 13:50:01
阅读次数:
277
【插入排序】:每次保证列表最左端子序列是排好顺序的,然后取下一个元素,扫描其左端的子序列,将其中大于目标元素的元素右移一个位置,直到找到合适的位置将目标元素插入子序列中。逐步增大排序完成的sublist的长度,最终完成整个列表的排序 算法思路如下: 1. 列表最左边第一个元素认为已经排序好了 2. ...
分类:
编程语言 时间:
2018-01-21 12:31:23
阅读次数:
163
【希尔排序】:也叫做递减增量排序算法,在插入排序算法的基础上做了改进。 希尔排序最开始将列表按照一定的步长(即增量)分成多个子序列,多每个子序列进行插入排序; 然后减小步长,重新分割子序列,再对每个子序列进行插入排序; 重复上述步骤,直到步长为1,对整个列表进行插入排序,排序完成。 【示意图】 给定 ...
分类:
编程语言 时间:
2018-01-21 12:26:50
阅读次数:
194
【选择排序】 选择排序是在冒泡排序(Bubble Sort)的基础上做了改进:每完成一次走访过程(pass)最多只需要交换一次。 每一次走访过程,寻找最大值,当此次走访结束时,将最大值交换到正确的位置; 接下来再在剩下的sublist中继续重复上述过程,直到完成n-1次走访(n为列表的长度); 此时 ...
分类:
编程语言 时间:
2018-01-21 11:07:04
阅读次数:
237
散列的实现 // 散列类 线性探测法 function HashTable () { this.table = new Array(137); this.values = []; this.simpleHash = simpleHash; this.betterHash = betterHash; ...
分类:
编程语言 时间:
2018-01-21 01:16:27
阅读次数:
167
实现列表类 练习 一. 增加一个向列表中插入元素的方法,该方法只在待插元素大于列表中的所有元素时才执行插入操作。这里的大于有多重含义,对于数字,它是指数值上的大小;对于字母,它是指在字母表中出现的先后顺序。 List.prototype.insertThen = function (element) ...
分类:
编程语言 时间:
2018-01-21 01:12:38
阅读次数:
178