随笔分类 -  数据结构与算法

摘要:原文转自 http://www.cnblogs.com/imapla/archive/2012/09/07/2674788.html 用C语言实现DES(数据加密算法)的一个例子,密文和密钥都是8个字符。 1、VC6 Win32 Console Application 阅读全文
posted @ 2016-10-18 16:23 ~小小鸟~ 阅读(1861) 评论(0) 推荐(0) 编辑
摘要:原理,通过一趟扫描将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 举个例子 如无序数组[6 2 4 1 5 9] a),先把第一项[6]取出来, 用[6]依次与 阅读全文
posted @ 2016-06-03 17:43 ~小小鸟~ 阅读(159) 评论(0) 推荐(0) 编辑
摘要:补充说明三点 1,桶排序是稳定的 2,桶排序是常见排序里最快的一种,比快排还要快…大多数情况下 3,桶排序非常快,但是同时也非常耗空间,基本上是最耗空间的一种排序算法 我自己的理解哈,可能与网上说的有一些出入,大体都是同样的原理 无序数组有个要求,就是成员隶属于固定(有限的)的区间,如范围为[0-9 阅读全文
posted @ 2016-06-03 17:19 ~小小鸟~ 阅读(249) 评论(0) 推荐(0) 编辑
摘要:原理,把原始数组分成若干子数组,对每一个子数组进行排序, 继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组 举例 无序数组[6 2 4 1 5 9] 先看一下每个步骤下的状态,完了再看合并细节 第一步 [6 2 4 1 5 9]原始状态 第二步 [2 6] [1 4] [5 阅读全文
posted @ 2016-06-03 16:32 ~小小鸟~ 阅读(199) 评论(0) 推荐(0) 编辑
摘要:插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。 插入排序方法分直接插入排序和折半插入排序两种,这里只介绍直接插入排序,折半插入排序留到“查找”内容中进行。 图1演示了对4个元素进行直接插入排序的过程,共需要(a),(b),(c)三次插入。 以下代码仅供 阅读全文
posted @ 2016-06-03 16:15 ~小小鸟~ 阅读(158) 评论(0) 推荐(0) 编辑
摘要://冒泡排序 void sort(int array[],int size) { for(int i=0; iarray[j]) //依次比较两个相邻的数,将小数放在前面,大数放在后面 { int temp=array[j]; array[j]=array[j+1]; array[j+1]=tem... 阅读全文
posted @ 2016-05-23 18:49 ~小小鸟~ 阅读(123) 评论(0) 推荐(0) 编辑
摘要:直接选择排序(Straight Select Sorting) 也是一种简单的排序方法,它的基本思想是:第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R{1}~R[n-1]中选取最小值,与R[1]交换,...., 第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交 阅读全文
posted @ 2016-05-23 18:39 ~小小鸟~ 阅读(199) 评论(0) 推荐(0) 编辑
摘要:如图,如果单链表有环,则在遍历时,在通过6之后,会重新回到3,那么我们可以在遍历时使用两个指针,看两个指针是否相等。 方法一:使用p、q两个指针,p总是向前走,但q每次都从头开始走,对于每个节点,看p走的步数是否和q一样。如图,当p从6走到3时,用了6步,此时若q从head出发,则只需两步就到3,因 阅读全文
posted @ 2016-04-24 16:20 ~小小鸟~ 阅读(616) 评论(0) 推荐(0) 编辑
摘要:二分查找算法是在有序数组中用到的较为频繁的一种算法,在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,其时间为O(n).但二分查找算法则更优,因为其查找时间为O(lgn),譬如数组{1, 2, 3, 4, 5, 6, 7, 8, 9},查找元素6,用二分查找的算法执行的 阅读全文
posted @ 2016-03-28 19:33 ~小小鸟~ 阅读(207) 评论(0) 推荐(0) 编辑
摘要:题目描述:输入一个整数,输出该整数二进制表示中1的个数。其中负数用补码表示。 另外一种思路是如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减去1,那么原来处在整数最右边的1就会变成0,原来在1后面的所有的0都会变成1。其余的所有位将不受到影响。举个例子:一个二进制数1100,从右 阅读全文
posted @ 2016-03-28 18:37 ~小小鸟~ 阅读(375) 评论(0) 推荐(0) 编辑
摘要:public class Solution { public TreeNode invertTree(TreeNode root) { if (root == null) { return null; } root.left = invertTree(root.left); root.right = invertTree(root... 阅读全文
posted @ 2016-03-28 17:54 ~小小鸟~ 阅读(930) 评论(0) 推荐(0) 编辑
摘要:堆 是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于(或不小于)其左孩子和右孩子节点的值。二叉堆 是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全二元树(二叉树)。二叉堆有两种:最大堆和最小堆。最大堆 根结点的键值是所有堆结点键值中最大者,父结点的键值总是大于或等于任何一个子... 阅读全文
posted @ 2015-07-22 10:59 ~小小鸟~ 阅读(247) 评论(0) 推荐(0) 编辑
摘要:树的定义树是由一个或多个结点组成的有限集合 T 。 其中:( 1 )一个特定的结点称为该树的根( root )结点 ;( 2 )结点之外的其余结点可分为 m (m ≥ 0 )个互不相交的有限集合 T 1 ,T 2 ,......,T m ,且其中每一个集合本身又是一棵树,称之为根的子树( subtr... 阅读全文
posted @ 2015-07-22 10:21 ~小小鸟~ 阅读(521) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示