数据结构
naw0011
这个作者很懒,什么都没留下…
展开
-
堆排序
工作一年有余,从事的是嵌入式应用软件开发,处理的数据不复杂,数据量也不大,就是要控制好逻辑,感觉没啥难度,本着明年初要换工作,现在抓紧时间看书,先从数据结构开始,大学学过数据结构,但是老师讲的基本为考试内容,很少说原理性的东西,自己也没认真听。工作后再来回顾,发现以前学的很多东西其实都很简单。废话不说,下面进去主题。 概念性的理解如下: 堆:很形象,类似一个金字塔,原创 2013-09-22 23:03:15 · 893 阅读 · 0 评论 -
快速排序
快速排序是一种分治技术的重要排序算法,快速排序按照元素的值对它们进行划分,具体的说,它对给定数组中得元素进行重新排列,以得到一个快速排序的分区,在一个分区中,所有在s下标之前的元素都小于等于A[s],所有在s下标之后的元素都大于等于A[s]。 显然,建立了一个分区后,A[s]已经在位于它的有序数组中的最终位置,接下来我们可以继续对A[s]前和后的子数组分别进原创 2013-09-27 20:56:41 · 822 阅读 · 0 评论 -
归并排序
合并排序是用分治法来实现的,对于一个需要排序的数组A[0...n-1],合并排序把它一分为二:A[0...n/2 - 1]和A[n/2...n -1],并对每个子数组递归重复以上操作。分得的子数数组,需要用另外的数组保存。对于合并排序,需要两个步骤,第一:对于数组进行分割,如上所述;第二,对于分割长度为1的数组,与相邻被分割数组进行排序,相当于两个有序数组的合并。重复以上操作。对于两个有序数组的合原创 2013-09-30 23:43:52 · 630 阅读 · 0 评论 -
冒泡排序,插入排序,选择排序,希尔排序
在另外的文章中介绍了快速,堆,归并排序,这三个排序都是高效的排序,下面介绍一些时间复杂度为O(n)的排序。 冒泡排序,顾名思义,就是将小的元素往上冒,大的元素往下沉,实际在变成的时候用的是大的元素往下沉的方法。每一趟过后,都有一个最大的元素被沉到底。下一次排序时数组规模减少了1。主要应用到了相邻两个元素互相比较的方法,是一个稳定的排序,但是无论数组是否有序,都要比较n^2次。原创 2013-10-23 22:00:58 · 1310 阅读 · 0 评论 -
二叉查找树之——递归实现
以二叉树为基础的树形数据结构在计算机中起到的作用不言而喻。最近在重温二叉树,主要是理解其中的递归和非递归实现的关联,并对二叉树的应用有更深的理解。其中,二叉树可以用来实现堆排序,可以用来形成查找树,由于其特殊的数据结构,在二叉树中的操作基本都是O(logn)的时间复杂度。下面慢慢细品。 二叉树的数据结构可以用来表示:typedef struct tagTreeNode{原创 2013-10-29 23:17:32 · 1555 阅读 · 0 评论 -
二叉查找树之——非递归实现
上一一篇文章介绍了二叉查找树的递归实现,递归算法以简洁明了,便于阅读与理解,但是只要是与递归有关,就少不了递归调用栈,也就是函数栈,这会导致栈溢出。假如递归层次达到10000次,程序就崩溃了,二叉查找树当插入的节点是升序或者逆序,就形成了链表,这样就形成了10000层递归。并且,递归没有非递归效率高,语音在于函数调用会相对耗时。所以非递归算法在安全性和效率上更实用。下面对二叉查找操作的非递归算法实原创 2013-10-30 19:59:05 · 1125 阅读 · 1 评论 -
二叉查找树之--AVL树
AVL树是带有平衡条件的二叉查找树。左右子树的高度差不超过1,其实就是-1,0,1。对AVL树的插入会破坏其平衡。我们把必须调整的节点叫做a。a不平衡会由下面4个插入情况导致:1.对的左儿子的左子树进行插入。2.对的左儿子的右子树进行插入。3.对的右儿子的左子树进行插入。4.对的右儿子的右子树进行插入。如下图所示。 上图中,1.4对称,2.原创 2013-11-05 20:44:22 · 723 阅读 · 0 评论