现在的位置: 首页 > 综合 > 正文

需要注意的几个编程习惯

2014年01月17日 ⁄ 综合 ⁄ 共 1064字 ⁄ 字号 评论关闭

1. 尽量用显而易见的变量去访问数组,并在旁边标出访问数组的范围。否则很容易搞混!

如:在归并排序中,需要对数组进行合并时,需要对同一数组的不同段进行合并。最好用两个变量来表示各自段的对应位置。

void merge(int * array, int start, int middle, int end)
{
 int nIter=0;
 int nIter1=start;   //a[start]...a[middle]
 int nIter2=middle+1;  //a[middle+1]...a[end]
...
...
}

2. 关于num--/num-=1/--num

对于num--的示例:

void main()
{
	int num=8;
	while(num>0)
		printf("%d ", num--);
}

输出为:8 7 ... 2 1 

即,用num--时,该num是自减之前的值。同样,自加“++”也是适用的

对于 num-=1 的示例:

void main()
{
	int num=8;
	while(num>0)
		printf("%d ", num-=1);
}

输出为:7 6 ... 2 1

即,用num-=1时,由于num是新的被赋的值,所以是从“-1”之后的值开始的。

对于--num的示例:

#include <stdio.h>

void main()
{
	int a=5;
	printf("%d", --a);
}

输出为:4

即--num时,先把num自减,然后才输出

同样的适用于:num++/num+=1/++num

3. 用临时变量代替某个变量,然后用于排序/查找合适的位置时,一定要对下标进行好判断;而且在最后给该变量找到合适的位置之后,需要在对应位置把temp填进去。很容易出错!

下面示例为堆中的下筛操作。其中,变量i表示要下筛的值,num为堆中的元素个数

//a[0]...a[num-1]
void siftdown(int array[], int i, int num)
{
	int temp=array[i];
	int child=i;
	while(2*i+1<num)
	{
		child=2*i+1;
		//保证child是最大的子节点
		if(child+1<num && array[child+1]>array[child])
			child=child+1;
		//如果子节点都比该节点值小,说明不用再下筛
		if(array[child]>temp)
			array[i]=array[child];
		else
			break;
		i=child;             //进行下一次的循环。如果两个子节点都比该节点的值小,该句是不会执行的!      
	}

	//array[child]=temp;
	array[i]=temp;
}

抱歉!评论已关闭.