
算法&数据结构
文章平均质量分 75
celte
这个作者很懒,什么都没留下…
展开
-
非递归遍历二叉树
1.先序遍历从递归说起void preOrder(TNode* root){ if (root != NULL) { Visit(root); preOrder(root->left); preOrder(root->right); }}递归算法非常的简单。先访问跟节点,然后访问左节点,再访转载 2012-12-02 23:19:13 · 512 阅读 · 0 评论 -
Cuda实现Radon变换
有关radon变换的算法的详情,写在这里:http://blog.youkuaiyun.com/celte/article/details/9826505用Cuda实现radon变换,可以类似C语言程序操作。。。这里可以简单的使用一个block,每个block包含numAngles个thread(在下面的代码中是181个thread)#include #include "math.h"#inc原创 2013-08-28 23:44:53 · 1273 阅读 · 0 评论 -
有趣的数字环的算法实现
看到这么个数字环,感觉很有趣,于是就想着用算法实现此数字环。首先附图看效果,看是什么样的数字环其实这个东西的算法实现是很简单的,写下它,是因为它代表了一种在算法中常用的一种思想,把一些看似很复杂很杂乱的想办法归一成一两种方式。计算机程序是很傻的,只会做你让它做的事。当你把问题分析清楚后,把杂乱的规律统一成类似的步骤即可!下面看源码和注释:/****算法思想:**观察数字原创 2013-08-11 09:25:19 · 1698 阅读 · 0 评论 -
C语言实现radon变换
因为实验室的要求,需要用C语言实现radon变换,对于刚刚我这个大二刚接触这种纯理论纯算法的人来说,真心不是一般的纠结。。。网络上搜索了好久,也没有找到。最后在优快云论坛见过别人发过一截代码,可是看起来依然不知道什么意思,不明觉厉。。后来装了个MATLAB后,查看MATLAB的radon函数,发现其中使用了radonc这么个函数,网上好不容易找到radonc.c文件,发现是一个MATLAB和原创 2013-08-08 02:35:08 · 8445 阅读 · 3 评论 -
选择排序——堆排序
/* *背景知识: * 堆是满足如下性质的完全二叉树:二叉树中任一非叶子结点关键字的值均小于(或者大于)它的孩子结点的关键字。 * 在小根堆中,第一个元素(完全二叉树的根节点)的关键字最小;大根堆中第一个元素关键字最大。显然,根中任一 * 子树仍然是一个堆。 *//* *算法思想: * 若对一个大根堆(小根堆)进行如下操作: * 1.输出堆顶元素 *原创 2013-03-18 13:49:05 · 561 阅读 · 0 评论 -
交换排序——冒泡排序
/* *算法思想: * 两两比较待排序元素的关键字,发现他们次序相反时即进行交换,直到没有逆序 * 元素为止。 *//* *过程分析: * 冒泡排序中参与比较的总是相邻的关键字r[i]与r[i+1],若是逆序则交换,直到 * 某一趟排序中没有出现元素交换,排序结束。 *//* *性能分析: * 时间复杂度O(n^2) */#include #define原创 2013-03-18 13:42:55 · 559 阅读 · 0 评论 -
归并排序——二路归并排序
/* *归并: * 指将两个或者两个以上的有序表合并成一个新的有序表 * *二路归并算法思想: * 将长度为n的待排序数据表看成是n个长度为1的有序表,并将这些有序表两两归并, * 便得到[n/2]个有序表;再将这[n/2]个有序表两两归并,如此反复,直到最后得到 * 长度为n的有序表为止。 *//* *过程分析: * 若有序表A、B同属于一个数据表R,是R的两个原创 2013-03-18 13:50:29 · 1372 阅读 · 0 评论 -
选择排序——直接选择排序
/* *算法思想: * 在每一趟的排序中,从待排序列中选出关键字最小或者最大的元素放在其最终的位置上 *//* *过程分析: * 在第i趟直接排序中,通过n-i次关键字的比较,从n-i+1个元素中选出关键字最小的元素 * ,与第i个元素进行交换。经过n-1趟比较,直到表有序为止 *//* *性能分析: * 时间复杂度O(n^2); */#include #原创 2013-03-18 13:47:46 · 542 阅读 · 0 评论 -
交换排序——快速排序
/* *算法思想: * 在待排序元素中选定一个作为中间数,使该数据表中的其他元素的关键字与“中间数” * 的关键字相比较,将整个数据表划分成为左右两个子表,其中左边子表任一元素的关键字 * 不大于右边子表中任一元素的关键字,然后再对左右子表分别进行快速排序,直到整个数据表有序 *//* *过程分析: * 1.首先较典型的选择“中间数”的方法是选择第一个元素 * 2.定原创 2013-03-18 13:44:21 · 598 阅读 · 0 评论 -
插入排序——希尔排序
/* *算法思想: * 先将整个待排序元素序列分割成若干子序列,对每个子序列分别进行直接插入排序。 * 当整个待排序元素序列“基本有序”时,再对整体元素进行一次直接插入排序 *//* *过程分析: * 希尔排序在每一个子序列使用直接插入排序,若第i趟希尔排序的步长值为di,则 * 对于待插入元素r[i],需要将其余r[i-di*j]依次比较,直到完成元素的移动与插入 *原创 2013-03-18 13:40:50 · 570 阅读 · 0 评论 -
插入排序——直接插入排序
/* *直接插入排序算法思想: * 将整个数据表分成左右两个子表,其中左子表为有序表,右子表为无序表; * 整个排序过程就是将右子表中的元素逐个插入到左子表中,直到右子表为空, * 而左子表成为新的有序表。 *//* *算法过程分析: * 将待排序的元素存放在数组r[n+1]中,在初始状态下,r[0]为监视哨,r[1]为有序区, * r[2]~r[n]为无序区。当操作原创 2013-03-18 13:39:22 · 691 阅读 · 0 评论 -
查找——二分查找
基本思想二分查找是建立在有序顺序表基础上的!步骤如下:1. 将表中间位置记录的关键字与给定K值进行比较,若两者相等,则查找成功。2. 若两者不相等,利用中间位置将表分成前后两个子表,如果中间位置记录的关键字大于给定K值则进一步查找前一子表,否则查找后一子表。3. 重复以上两个步骤,直到找到满足条件的记录则查找成功,或者分解出的子表不存在,此时查找失原创 2013-03-03 22:41:40 · 778 阅读 · 0 评论 -
查找——简单顺序查找
基本思想从顺序表的一端开始扫描,将给定值K依次与顺序表中各数据元素的关键字进行比较,若当前扫描到的结点关键字与给定值K相等,则查找成功;若扫描结束后,仍未找到关键字等于K的结点,则查找失败。实例分析在顺序表:22,34,25,12,35,67,7,45中查找25的位置。在数组元素的1~8位置中依次存放组成顺序表的数据元素,将给定值K作为新数据元素的数据项存放在0位置(称其为监视哨)原创 2013-03-03 22:28:30 · 829 阅读 · 0 评论 -
二叉树的各种操作
数据结构实验,主要是对erc原创 2014-05-28 22:15:35 · 937 阅读 · 0 评论