数据结构
Markus.Zhao
这个作者很懒,什么都没留下…
展开
-
排序算法之三 插入排序(Insertion Sort)
概述插入排序是一种简单直观的排序算法。它的工作原理非常类似于我们抓扑克牌,对于未排序数据(右手抓到的牌),在已排序序列(左手已经排好的牌)中从后向前扫描,找到相应位置并插入,同时需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。算法描述1.从第一个元素开始,即用该元素初始化已排序序列。2.取出下一个元素,在已经排序的元素序列中从后向前扫描。3.如果该元素(已排序)大于新元素,则...原创 2019-01-12 15:59:02 · 337 阅读 · 1 评论 -
排序算法之四 希尔排序(Shell Sort)
概述希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。希尔排序中包含了分而治之的思想,首先将一个输入序列根据增量分成若干个子序列,然后对每个子序列分别进...原创 2019-01-12 16:04:52 · 407 阅读 · 0 评论 -
排序算法之六 快速排序(Quick Sort)
概述快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。在平均状况下,排序n个元素要O(nlogn)次比较。在最坏状况下则需要O(n^2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他O(nlogn)算法更快,因为它的内部循环可以在大部分的架构上很有效率地被实现出来。算法描...原创 2019-01-12 16:12:29 · 353 阅读 · 0 评论 -
排序算法之七 堆排序(Heap Sort)
概述堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。算法描述将待排序的元素序列(R1,R2….Rn)构建成最大堆,此堆为初始的无序区。(关于最大堆的详细构建过程请点这里)将最大堆的堆顶元素R1(当前堆树中的最大值)与最后一个元素Rn交换。此时得到新的无序区(R1...原创 2019-01-12 16:19:53 · 546 阅读 · 0 评论 -
数据结构 二叉树
概述二叉树是树的特殊一种,具有如下特点:每个结点最多有两颗子树,结点的度最大为2。左子树和右子树是有顺序的,次序不能颠倒。即使某结点只有一个子树,也要区分左右子树。二叉树的一些术语如下:节点的度:一个节点含有的子树的个数称为该节点的度;叶节点或终端节点:度为零的节点;非终端节点或分支节点:度不为零的节点;父亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点...原创 2019-01-08 15:12:32 · 246 阅读 · 0 评论 -
数据结构 堆树(最大堆、最小堆)
一、堆树的定义(1)堆树是一颗完全二叉树;(2)堆树中某个节点的值总是不大于或不小于其孩子节点的值;(3)堆树中每个节点的子树都是堆树。当父节点的键值总是大于或等于任何一个子节点的键值时为最大堆,也称大根堆。当父节点的键值总是小于或等于任何一个子节点的键值时为最小堆,也称小根堆。如下图所示,上边为最大堆,下边为最小堆。二、堆树的操作下面以最大堆为例进行讲解,最小堆同理。2.1...原创 2019-01-09 15:36:10 · 5102 阅读 · 0 评论 -
排序算法之一 冒泡排序(Bubble Sort)
概述冒泡排序是一种极其简单的排序算法,它重复地走访过要排序的元素,依次比较相邻两个元素,如果它们的顺序错误就把他们调换过来,直到没有元素再需要交换,排序完成。这个算法的名字由来是因为越小(或越大)的元素会经由交换慢慢“浮”到数列的顶端。尽管冒泡排序是最容易了解和实现的排序算法之一,但它对于少数元素之外的数列排序是很没有效率的。算法描述1.比较相邻的元素,如果前一个比后一个大,就把它们两个对调...原创 2019-01-09 21:46:18 · 2452 阅读 · 0 评论 -
排序算法之二 选择排序(Selection Sort)
概述选择排序是一种简单直观的排序算法。是表现最稳定的排序算法之一,无论什么数据进去都是O(n^2)的时间复杂度,所以用到它的时候,数据规模越小越好。选择排序与冒泡排序的区别:冒泡排序通过依次交换相邻两个顺序不合法的元素位置,从而将当前最小(大)元素放到合适的位置;而选择排序每遍历一次都记住了当前最小(大)元素的位置,最后仅需一次交换操作即可将其放到合适的位置。算法描述初始时在序列中找到最小...原创 2019-01-09 22:01:24 · 361 阅读 · 0 评论 -
排序算法之五 归并排序(Merge Sort)
概述归并排序是创建在归并操作上的一种有效的排序算法,效率为O(nlogn),1945年由冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。通过将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。归并排序效率虽然较高,但所需的空间复杂度为O(n),典型的空间换时间。算法描述把长度为...原创 2019-01-10 01:42:41 · 437 阅读 · 0 评论