发布时间:2013-01-09 12:11:03
自己实现一个memcpy的函数。 需要考虑的地方在src和dest重叠的情况。 gcc编译有warning,运行通过。 点击(此处)折叠或打开 #include <stdio.h> #include <stdlib.h> void* mymemcpy(const void* src, void* dest, int size){ if(src == NULL || dest==NULL) return NULL; &nb......【阅读全文】
发布时间:2013-01-09 12:10:00
排序数组,使奇数在左边,偶数在右边,同时需保持元素相对顺序稳定。 正确解法使用冒泡即可。 代码中额外提供了基于快排的方法。(麻烦且没有必要,仅作思考和练手使用) 排序的本质是依据不同的权重计算方法,按权重进行排序。这里通过对数字奇偶性和它的的下标,计算了每个数字的权重,然后根据权重进行升序排列。 权重计算规则:奇数的权重小于偶数的权重,下标小的权重小于下标大的。 这种思想可用于各种排序的变体。 点击(此处)折叠或打开 #include <stdio.h> #include <stdlib.h> #define SWAP(a,b) (......【阅读全文】
发布时间:2013-01-09 12:07:57
第一部分:宏为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。而宏只是在预处理的地方把代码展开,不需要额外的空间和时间方面的开销,所以调用一个宏比调用一个函数更有效率。但是宏也有很多的不尽人意的地方。1、宏不能访问对象的私有成员。2、宏的定义很容易产生二意性。我们举个例子:#define square(x) (x*x)我们用一个数字去调......【阅读全文】
发布时间:2013-01-09 12:03:58
[post] 一. 华为一道面试题-1-n排序有N个大小不等的自然数(1--N),请将它们由小到大排序。 要求程序算法:时间复杂度为O(n),空间复杂度为O(1)。网上转的,一开始也没有注意到最开始的半句。 算法:N个不等的自然数1~N,排序完成后必然为1~N。所以可以一次遍历,遇到a!=i的就把a和a[a]交换。 void sort(int a[], int n){int i;int t; /*临时变量:空间复杂度O(1)*/ for (i=1; i<n+1; i++) /*时间复杂度O(n)*/{while(a!=i){t = a[a]; a[a] = a;//排......【阅读全文】