数据结构与算法基础
梦§离
这个作者很懒,什么都没留下…
展开
-
数据结构与算法-二分查找实现
搜索搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常的答案是真的或假的,因为该项目是否存在。 搜索的几种常见方法:顺序查找、二分法查找、二叉树查找、哈希查找二分法查找二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录...原创 2019-10-03 17:53:36 · 199 阅读 · 0 评论 -
数据结构与算法-排序算法稳定性
排序算法(英语:Sorting algorithm)是一种能将一串数据依照特定顺序进行排列的一种算法。排序算法的稳定性稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序。也就是如果一个排序算法是稳定的,当有两个相等键值的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前。当相等的元素是无法分辨的,比如像是整数,稳定性并不是一个问题。然而,假设以下的数对...原创 2019-10-03 17:57:22 · 118 阅读 · 0 评论 -
数据结构与算法-冒泡排序实现
冒泡排序冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的运作如下:比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。 对每一...原创 2019-10-03 17:56:14 · 259 阅读 · 0 评论 -
数据结构与算法-选择排序实现
选择排序选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一...原创 2019-10-03 17:57:49 · 200 阅读 · 0 评论 -
数据结构与算法-快速排序实现
快速排序快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。步骤为:从数列中挑出一个元素,称为"基准"(pivot), 重新排序数列...转载 2019-10-03 17:53:50 · 2306 阅读 · 0 评论 -
数据结构与算法-常见时间复杂度
常见时间复杂度执行次数函数举例 阶 非正式术语 12 O(1) 常数阶 2n+3 O(n) 线性阶 3n2+2n+1 O(n2) 平方阶 5log2n+20 O(logn) 对数阶 2n+3nlog2n+19 O(nlogn) nlogn阶 6n3+2n2+3n+4 O(n3) 立方阶...原创 2019-10-03 17:55:56 · 137 阅读 · 0 评论 -
数据结构与算法-简单队列实现
队列的实现同栈一样,队列也可以用顺序表或者链表实现。class Queue(object): """队列""" def __init__(self): self.items = [] def is_empty(self): return self.items == [] def enqueue(self, item):...原创 2019-06-04 11:45:43 · 151 阅读 · 0 评论 -
数据结构与算法-简单链表实现
简单链表的实现# coding:utf-8class LinkedListNode(object): '''链表节点类''' def __init__(self, value): # 存储值的地方 self.value = value # 存储下一节点指针(位置) self.pointer = None...原创 2019-06-04 11:44:02 · 165 阅读 · 0 评论 -
数据结构与算法-链表与顺序表对比
链表与顺序表的对比链表失去了顺序表随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大,但对存储空间的使用要相对灵活。链表与顺序表的各种操作复杂度如下所示:操作 链表 顺序表 访问元素 O(n) O(1) 在头部插入/删除 O(1) O(n) 在尾部插入/删除 O(n) O(1) 在中间插入/删除 O(n)...原创 2019-10-03 17:55:17 · 175 阅读 · 0 评论 -
数据结构与算法-单向循环链表实现
单向循环链表# coding:utf-8class LinkedListNode(object): '''链表节点类''' def __init__(self, value): # 存储值的地方 self.value = value # 存储下一节点指针(位置) self.pointer = None...原创 2019-06-04 11:46:55 · 167 阅读 · 0 评论 -
数据结构与算法-双向链表
双向链表class Node(object): """双向链表节点""" def __init__(self, item): self.item = item self.next = None self.prev = Noneclass DLinkList(object): """双向链表""" def _...原创 2019-06-04 11:46:11 · 96 阅读 · 0 评论 -
数据结构与算法-简单双向循环链表实现
双向循环链表# coding :utf-8class LinkListNode(object): """双向循环链表节点""" def __init__(self, value): # 上指针 self.prev = None # 值 self.value = value # 下指针 ...原创 2019-06-04 11:46:01 · 402 阅读 · 0 评论 -
数据结构与算法-简单栈实现
栈的实现.class StackOne(object): """栈""" def __init__(self): self.__items=[] def is_empty(self): """判断是否为空""" return self.__items == [] def push(self,item): ...原创 2019-06-04 11:45:49 · 122 阅读 · 0 评论 -
数据结构与算法-归并排序实现
归并排序归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。归并排序的分析#coding=utf-8def merge_sort(ll): ...原创 2019-10-03 17:53:10 · 142 阅读 · 0 评论