
C语言
小威学长
提高自己,分享他人
展开
-
c语言中冒泡排序、插入排序、选择排序算法比较
掌握好常用的排序算法,在实际的项目开发中可以节省很多的时间。每一种排序算法在执行的效率上是存在差别的,这些微小的时间差,也许在平常的联系当中感觉不到,但是涉及到数据量比较大或者是在资源比较紧张的系统中就显得尤其的重要,比如嵌入式系统。下面简要介绍三种常用的排序算法以及他们的执行效率的比较。 冒泡排序: 思路:将相邻的两个数比较,将较小的数调到前头;有n个数就要进行n转载 2015-07-29 20:41:10 · 2078 阅读 · 0 评论 -
数据结构之快速排序
快速排序算法是冒泡排序算法的改进,与冒泡排序类似,快速排序也是通过交换逆序元素来进行排序的。不同的是,冒泡排序的交换是相邻的,而且快速排序一次交换就可以消除多个逆序元素。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。原创 2015-10-26 22:23:52 · 627 阅读 · 0 评论 -
找到一个数的所有字典序即字符串的全排列
字典序:对于数字1、2、3......n的排列,不同排列的先后关系是从左到右逐个比较对应的数字的先后来决定的。例如对于5个数字的排列 12354和12345,排列12345在前,排列12354在后。按照这样的规定,5个数字的所有的排列中最前面的是12345,最后面的是 54321。字典排序算法:1、首先我们对整个序列进行一个快速排序,原创 2015-11-20 15:20:36 · 2721 阅读 · 0 评论 -
动态规划初体验
动态规划在有很多的资料,也看了不少,大部分都在说状态转移方程怎么提炼,但是一直都没有弄清楚。模模糊糊的算是理解一点了吧,做下动态规划的笔记。首先,对于动态规划的题目一般有以下几种::线性动规:拦截导弹,合唱队形,挖地雷,建学校,剑客决斗等;区域动规:石子合并, 加分二叉树,统计单词个数,炮兵布阵等;树形动规:贪吃的九头龙,二分查找树,聚会的欢乐,数字三角形等;背包问题:01背包原创 2016-01-15 16:58:27 · 603 阅读 · 0 评论 -
staitc用于函数内部和函数外部的不同
1、当static用于函数内部时,例如static int i;当函数执行完后,i不会被释放,下一次调用函数时,i的值会保留上次的值继续使用。程序如下:#include #include void func(){ static int i=0; int j=0; i++; j++; printf("i: %d, j: %d \n",i,j原创 2015-10-26 23:01:17 · 1968 阅读 · 0 评论 -
scanf和gets的区别
今天在网上做一道题时偶然发现,原来gets竟然比scanf快。以下是程序运行时间对比:Gets的: (30ms)#include #include int main(){ int from,end,l; char str[5]; char t; while(gets(str)) {原创 2015-12-02 09:34:05 · 933 阅读 · 0 评论 -
数据结构之直接插入排序、折半插入排序、希尔排序算法
直接插入排序:我们的记录本身就是基本有序的,我们只需要少量的插入操作,就可以完成整个记录集的排序工作,此时直接插入很高效。还有就是记录数比较少时,直接插入的优势也比较明显。void InsertSort(int b[],int n) //直接插入排序{原创 2015-10-23 16:29:04 · 5894 阅读 · 0 评论 -
深度优先搜索——毕业BG
深度优先搜索就是通过递归对所有的点进行遍历操作,同时对已经访问的点进行标记,逐步进行。当发现有点已经被访问过了的时候,则退回到上一层点,同时将标记点取消标记。另选一个未曾访问过的点重新开始,直到遍历了所有的点。OJ题目题目描述: 每年毕业的季节都会有大量毕业生发起狂欢,好朋友们相约吃散伙饭,网络原创 2015-11-25 21:51:11 · 1193 阅读 · 0 评论 -
C语言标准库函数qsort
qsort包含在头文件中,此函数根据你给的比较条件进行快速排序,通过指针移动实现排序。排序之后的结果仍然放在原数组中。使用qsort函数必须自己写一个比较函数。函数原型:void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) );转载 2015-11-20 15:46:50 · 570 阅读 · 0 评论 -
二叉树的创建和前序中序后序遍历
二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)左、右子树也分别为二叉排序树;(4)没有键值相等的节点。 二叉树是最为常用的数据结构,它的实际应用非常广泛。二叉树的遍历方式有三种,前序遍历、中序遍历、后序遍历。先序遍历的原创 2015-10-18 20:49:34 · 850 阅读 · 0 评论 -
二维数组作为参数传递的问题
1、当我们使用二维数组作为参数传递的时候,所传递的二维数组的第二项必须为一个常数,否则编译不能通过,如int a[][3];例如:#include#define N 3int turn(int a[][N]) //注意此处{ int i,j,temp; temp=0; for(i=0; i<N; i++) { for(j=0; j原创 2015-08-03 20:08:18 · 1157 阅读 · 0 评论 -
面试经典题目:字符串翻转I am a student
题目:写一个函数,将字符串翻转,翻转方式如下:“I am a student”反转成“student a am I”,不借助任何库函数,要求单词内字符的顺序不变,句子中单词以空格符隔开。思路:先反转整个字符串,然后再反转字串。譬如先将“I am a student”反转为“tneduts a ma I”,然后再对每个字串(空格分割)反转一次。 代码:#include #inc原创 2015-11-18 15:15:09 · 5716 阅读 · 0 评论