2008年10月12日星期日

Slyar Home

来自"Slyar Home"的最新文章,如果您不希望再收到此邮件,请退订;如果您需要更换其它邮箱接收邮件,请点击这里

修改我的C/C++程序代码风格(SLYAR)

Sun, 12 Oct 2008 14:15:36 +0800

文章作者:Slyar 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。

今天看了《华为编程规范和范例》,决定修改我的代码风格,以使我的代码和国际接轨。。。

其实我蛮喜欢我自己原来的风格的,因为可以少打很多东西,新的风格需要很多空格,需要很多回车,需要很多括号。。。我是懒人,我本不想改。。。但是没办法,现在不改以后就不好改了,我知道我的代码不是只给我自己看,所以,我还是规范一些,修改我自己的风格吧。。。

《华为编程规范和范例》在Slyar的下载基地里有,hwprogram.doc,需要的可以自己下载。

列举一下我需要修改的风格:

1、相对独立的程序块之间、变量说明之后必须加空行。

以前变量之间我是加空行的,不过像if语句段这样的程序块,我是不加空行的,需要修改。

2、if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句部分无论多少都要加括号{}

以前像if、for、do、while等语句的执行语句如果只有一行我就会省略{},需要修改。

3、程序块的分界符(如C/C++语言的大括号'{'和'}')应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。

以前我习惯把"{"写在if、for等语句后面,需要修改。

4、在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如->),后不应加空格。

(1) 逗号、分号只在后面加空格。
(2)比较操作符, 赋值操作符"="、 "+=",算术操作符"+"、"%",逻辑操作符"&&"、"&",位域操作符"<<"、"^"等双目操作符的前后加空格。
(3)"!"、"~"、"++"、"--"、"&"(地址运算符)等单目操作符前后不加空格。
(4)"->"、"."前后不加空格。
(5) if、for、while、switch等与后面的括号间应加空格,使if等关键字更为突出、明显。

5、注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。

以前放上面注释了不加空行,需要修改。

6、注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。

以前如果是默认优先级,就不加括号了,懒。。。需要修改。

7、尽量用乘法或其它方法代替除法,特别是浮点运算中的除法。

8、不要一味追求紧凑的代码,因为紧凑的代码并不代表高效的机器码。

9、过程/函数中申请的(为打开文件而使用的)文件句柄,在过程/函数退出之前要关闭。

分配的内存不释放以及文件句柄不关闭,是较常见的错误,而且稍不注意就有可能发生。这类错误往往会引起很严重后果,且难以定位。

10、时刻注意表达式是否会上溢、下溢。

返回顶部

快速排序(QuickSort)算法 C语言实现

Sat, 11 Oct 2008 22:59:15 +0800

文章作者:Slyar 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。

下午做题的时候用到了快速排序(QuickSort),只不过这次换成C语言实现。草草写了一个,感觉很乱,改。。。改完还乱。。。继续改。。。最后结果就是如下这个快速排序(QuickSort)算法的C语言实现。

void qsort(int s[], int l, int r)
{
int i, j, x;
if (l < r)
{
i = l;
j = r;
x = s[i];
while (i < j)
{
while(i < j && s[j] > x) j--;
/* 从右向左找第一个小于x的数 */
if(i < j) s[i++] = s[j];
while(i < j && s[i] < x) i++;
/* 从左向右找第一个大于x的数 */
if(i < j) s[j--] = s[i];
}
s[i] = x;
qsort(s, l, i-1);
/* 递归调用 */
qsort(s, i+1, r);
}
}

我的这个算法实现是每次从数组头部取数字作为基准,看起来好理解一些,呵呵~我是这么认为的。

快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。

分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。

快速排序(QuickSort)的最坏时间复杂度应为0(n2),最好时间复杂度为O(nlgn),平均时间复杂度为O(nlgn)。快速排序(QuickSort)在系统内部需要一个栈来实现递归。若每次划分较为均匀,则其递归树的高度为O(lgn),故递归后需栈空间为O(lgn)。最坏情况下,递归树的高度为O(n),所需的栈空间为O(n)。

返回顶部

您可以直接回复此邮件与作者联系,该服务由Feedsky提供技术支持,祝您使用愉快

没有评论: