算法与数据结构
文章平均质量分 71
那个少年
一个瞎搞的IT男
展开
-
排序算法(一):插入排序、冒泡排序、合并排序、选择排序
排序算法(一):插入排序、冒泡排序、合并排序、选择排序原创 2015-02-01 16:13:10 · 1061 阅读 · 0 评论 -
从字符串中提取网络适配器的Mac地址(char* 转hex)
网络适配器的MAC地址为全球唯一的6字节(48位)地址,标识一台计算机地址(一台计算机可以装多个网络适配器,因此可以有多个MAC地址),是固化在适配的ROM中的地址。将char数组类型(字符串型)的MAC转化为十六进制:#include #include #include #define uint unsigned int #define uchar unsigned char原创 2016-08-29 22:33:59 · 3408 阅读 · 0 评论 -
hdu 1003 :Max Sum
初来乍到,动态规划也是刚刚接触。刚开始用暴力法,Time limit……在网上搜了代码。大多是只说是动态规划经典问题、求最大子序列和,然后就是一串代码。最好的就是带了几行注释…没有太多通俗的解释…硬着头皮看了一晚上,终于算是有了眉目想通了。在这里写下自己对这个动态规划求最大子序列和的理解,通俗一点的解释。(只是个人的理解哦,仅供参考)这里的求最大子序列和应该是变种了吧,呵呵,还要加上最转载 2016-02-19 09:59:52 · 266 阅读 · 0 评论 -
FFT中的Rader算法:码率倒序
在实现FFT(快速Fourier变换)计算的时候,第一步要做的就是实现码位(二进制码)倒序,这里有一种算法,叫做雷德(Rader)算法。废话少说,请看下面0-7的顺序排列与倒序排列: 由上面的表可以看出,按自然顺序排列的二进制数,其下面一个数总是比其上面一个数大1,即下面一个数是上面一个数在最低位加1并向高位进位而得到的。而倒位序二进制数的下面一个数是上面一个数在最高位加1并原创 2015-12-12 10:45:22 · 4808 阅读 · 0 评论 -
内存字节对齐
最近找工作,老是出现类似sizeof(struct)的笔试题,以为很简单···后来才发现里面有奥妙,废话不多说,以下是总结的几位牛人博客的解释。一、概念对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。二、为什么要字节对齐需要字节对齐的根本原原创 2015-10-18 15:06:44 · 363 阅读 · 0 评论 -
基本数据结构:队列(一:数组实现)
一、概述队列这种数据结构表示一个动态集合。就像生活中人们在超市购完物等待收银一样,先来的人排在列队的前面也先离开队列,后来的人排在队列后面也后离开队列(不考虑没素质的人插队)。所以,在计算机中,称队列为 “First in first out(FIFO)”表。由上可知,队列支持两种基本操作:Push():表示从队列尾部插入一个元素;Pop():表示取走队列首部元素(队首元素离开队列)。下面原创 2015-03-05 10:10:08 · 515 阅读 · 0 评论 -
排序算法(五):计数排序与非比较排序
1..前言:前面所写的四篇博文都是基于关键字比较排序的。可以证明(决策数理论),任何一个比较排序算法在最坏情况下,时间复杂度的下界为 nlgn。非比较排序算法可以突破此下界,以下将详细介绍非比较排序中的计数排序,并大概介绍下桶排序和基数排序的思想。2..计数排序:假设n个输入元素中的每一个都是介于0到k之间的整数(k为某个整数),计数排序的思想是对每一个输入元素x,确定出小于等原创 2015-02-09 10:02:35 · 574 阅读 · 0 评论 -
排序算法(四):Stooge排序
1..算法原理前博已描述的快速排序每次将数组分割成2部分,对2部分(继续递归分割)分别进行排序,最后将其合并实现整个数组的排序。Howard、Fine等教授提出的Stooge排序算法则将数组分成3部分,分别对其排序后合并。伪代码如下:STOOGT_SORT(A,left,right)if A[left]>A[right] then exchange (A[left],A[ri原创 2015-02-07 11:30:41 · 872 阅读 · 1 评论 -
排序算法(三):快速排序与顺序统计学
1.. 算法原理:类似于归并排序,快速排序是基于分治模式。具体有以下三个步骤:分解:数组A[left..right]被划分为两个(可能为空)子数组A[left..q-1]和A[q+1..right],使得A[left..q-1]中的每一个元素都小于等于A[q],而且小于等于A[q+1..right]中的每一个元素。下标q也在这个划分过程中进行计算。解决:通过递归调用快速排序,对子数组A[l原创 2015-02-07 09:41:06 · 1147 阅读 · 0 评论 -
分治法求数组的最大最小值
分治法的思想就是每次将数组一分为二,分别求两部分的最大值与最小值,然后比较哪部分的更大和更小,最后得出整个数组的最大最小值。源代码如下:/************************************************************************//* 函数功能:分治法求double型数组的最大最小值 参数:double array[] 待求数组原创 2015-01-18 15:05:37 · 3143 阅读 · 0 评论 -
排序算法(二):堆排序
1... 要讲清楚(二叉)堆排序的原理,得先从完全二叉树讲起。因此,我们先了解下完全k叉树:完全K叉树是所有的叶子节点都有相同的深度,并且所有的内部节点(非叶子节点)的度(孩子)都是k,如下图所示。此处要注意,考虑到C语言数组下标从0开始,到N-1(N为数组长度)结束,因此,根节点标号为0,深度标号也从0开始,以此类推。那么深度为h的叶节点的个数为k^h,从而有n个叶节点的完全k叉树的高度原创 2015-02-04 10:36:43 · 432 阅读 · 0 评论 -
字符串替换
题目:将某一字符串中的某段子串替换成新的字串,要求是原址(在源串上替换)替换,源串自己保证长度以便容纳新的字串。例:将 abcdefcdef 中的 c替换成gg,替换后的字符串:abggdefggef ;或将cde替换成a,替换后的字符串:abafaf。代码:/**********************************************************原创 2016-08-31 22:46:46 · 591 阅读 · 0 评论