数据结构
不想学编程
这个作者很懒,什么都没留下…
展开
-
求最大公约数问题----辗转相除法
#include using namespace std;int gcd( int m, int n ) { if( m<n ) { int temp = m; m = n; n = temp; } if( m%n == 0 ) { return n; } else { return gcd( n,m%n ); }}int main(){原创 2014-05-29 15:48:21 · 707 阅读 · 0 评论 -
算法3:最常用的排序——快速排序
上一节的冒泡排序可以说是我们学习第一个真正的排序算法,并且解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到了O(N2)。假如我们的计算机每秒钟可以运行10亿次,那么对1亿个数进行排序,桶排序则只需要0.1秒,而冒泡排序则需要1千万秒,达到115天之久,是不是很吓人。那有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。转载 2014-06-05 14:58:34 · 1443 阅读 · 0 评论 -
<实例>输出给定字符串的全部连续子序列
在别人博客上看到的,据说是阿里实习生电面的题目,自己拿来做了一下 。题目如下:原创 2014-05-30 15:42:26 · 2181 阅读 · 2 评论 -
二叉树的建立和基本操作
定义二叉树结构体:创建二叉树:原创 2014-05-30 11:46:34 · 6804 阅读 · 6 评论 -
<编程之美>3.9重建二叉树
给定一棵二叉树,假设每个节点都用唯一字符来表示,具体结果如下:原创 2014-05-28 21:50:04 · 749 阅读 · 0 评论 -
白话经典算法之直接排序(改)
直接选择排序和直接插入排序类似,都将数据分为有序区和无序区,所不同的是直接播放排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后。 设数组为a[0…n-1]。1. 初始时,数组全为无序区为a[0..n-1]。令i=02. 在无序区a[i…n-1]中选取一个最小的元素,将其转载 2014-06-03 17:11:01 · 623 阅读 · 0 评论 -
白话经典算法系列之七 堆与堆排序(改)
二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆。当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆。下图展示一个最小堆:转载 2014-06-04 10:20:51 · 672 阅读 · 0 评论 -
白话经典算法系列之五 归并排序的实现(改)
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。首先考虑下如何将将二个有序数列合并。这个非常简单,只要从比较二个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。[cpp] view plaincopy转载 2014-06-04 16:12:11 · 615 阅读 · 0 评论 -
<实例>放苹果问题
放苹果问题非递归算法 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分原创 2014-06-23 16:15:26 · 1031 阅读 · 0 评论 -
<实例>消除内嵌括号——使用栈实现
题目:给定一个如下格式的字符串(1,(2,3),(4,(5,6),7))括号内的元素可以是数字,也可以是另一个括号,请实现一个算法消除嵌套的括号,比如把上面的表达式变成:(1,2,3,4,5,6,7),如果表达式有误请报错。原创 2014-06-24 10:05:58 · 671 阅读 · 0 评论 -
快速排序代码(选择最右值最为枢纽元)
下面是参考《数据结构域算法分析》书上部分代码,结合自己理解写出的快速排序代码原创 2014-06-05 15:11:13 · 1766 阅读 · 0 评论