随笔分类 - 算法与数据结构
摘要:堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: 堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树。 堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树。 将根节点最大的堆叫做最大堆或大
阅读全文
摘要:树的概念 树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 每个节点有零个或
阅读全文
摘要:栈(Stack),也叫做堆栈, 是一种容器, 可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认
阅读全文
摘要:顺序查找非常简单,只是个开胃菜,今天主要练习的是哈希查找 先上顺序查找代码: 在来看hash查找: 算法思想 哈希的思路很简单,如果所有的键都是整数,那么就可以使用一个简单的无序数组来实现:将键作为索引,值即为其对应的值,这样就可以快速访问任意键的值。这是对于简单的键的情况,我们将其扩展到可以处理更
阅读全文
摘要:def reverse1(self): """反转链表""" temp = self.first prev = None while temp: temp_next = temp.next temp.next = prev prev = temp temp = temp_next self.firs
阅读全文
摘要:# 将递归分解列表,直至最小(即每个列表仅有一个元素) # 将列表分解最小之后,递归合并两个列表,即挨个比较两个列表中最前面的元素,谁较小就将谁加入新的列表,而后该列表的下标后移一位,继续比较,直至其中一个列表为空,而后将另一个列表中剩余的元素加入新列表 # 不断合并,直至完全排序完成 # 时间复杂
阅读全文
摘要:选择排序: 默认最左侧的元素为最小,而后依次将右侧的每个元素与最左侧的元素比较,如果比最左测的元素小,则交换位置 第一遍遍历会将最小的元素放在最左边,而后继续遍历,依次得出第二小、第三小...第二大的元素
阅读全文
摘要:shell(希尔)排序是插入排序的一种,是直接插入排序算法的一种更高效的改进版本, 其思想是使数组中任意间隔h的元素都是有序的,其目的是为了减少元素的移动距离. 时间复杂度: O(nlogn)~O(n^2) array_0 = [12, 23, 54, 32, 11, 76, 5, 73,2, 89
阅读全文
摘要:# 从待排序的n个记录中的第二个记录开始,依次与前面的记录比较并寻找插入的位置,每次外循环结束后,将当前的数插入到合适的位置。# 时间复杂度: O(n)~O(n^2) def insert_sort1(array): n = len(array) for i in range(1, n): for j in range(i, 0, -1): ...
阅读全文
摘要:冒泡排序算法的原理如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较 时
阅读全文
摘要:# 快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。# 时间复杂度O(nlog2n)def quick_sort(array): if len(array) array[first]] re...
阅读全文
摘要:二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好 二分查找即搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果中间元素大于或小于要查找元素,则在小于或大于中间元素的那一半进行搜索,而且跟开始一样从中间元素开始比较. 如果在某一步骤数组为空,则代表找不到.
阅读全文

浙公网安备 33010602011771号