昨天对希尔排序的算法讨论中出现了两个问题,一个是对这个算法实现的不理解;另一个是对for循环的执行过程和i++及++i在其中运用的不理解。
前者主要是大家对c语法有些陌生,将程序分块来看就会容易些!代码及实现过程如下图所示:
从上图代码很容易看出希尔排序的思想实现主要是在序号1的while循环中完成的。序号1循环控制的是增量序列的变化,序号2控制的是在某个增量值下交换待排序序列的每一组,序号3、4控制的是每组值是应该交换及交换运算!
对于for循环及执行过程如下图所示:
而对于其中的i++换成++i及其所放位置在for循环中是一样的!它们不同用法之一是在计算问题中使用时!验证过程如下所示:
#include"stdio.h" void main() { int i; //验证for循环的执行过程和i++及++i的所放位置及用法异同 //使用i++,在条件中 for(i=0;i<2;i++) { printf("%d/n" , i); getchar(); } printf("i++ in condition is ok"); printf("/n",""); getchar(); //使用++i,在条件中 for(i=0;i<2;++i) { printf("%d/n",i); getchar(); } printf("++i in condition is ok"); printf("/n",""); getchar(); //使用++i,在循环体内 for(i=0;i<2;) { printf("%d/n",i); getchar(); ++i; } printf("++i in loop-body is ok"); printf("/n",""); getchar(); //使用i++,在循环体内 for(i=0;i<2;) { printf("%d/n",i); getchar(); i++; } printf("i++ in loop-body is ok"); printf("/n",""); getchar(); //====================== //验证i++和++i i=0; int count=0; count=1+i++; printf("count值是:%d/n",count); printf("i值是:%d/n",i); printf("i++ is ok"); printf("/n",""); getchar(); i=0; count=0; count=++i+1; printf("count值是:%d/n",count); printf("i值是:%d/n",i); printf("++i is ok"); getchar(); }
执行结果如下图所示:
通过讨论不仅能够带动参与人积极思考,而且还能学到一个人看书所不能看到学到的知识!
基础还很欠缺,要多思考多讨论多练习……
//代码证明补充2010-10-26
i++(即上述运算执行步骤中的3)在循环完之前运行了一次,中途中断的话不会运行i++了
#include "stdio.h" void main() { int i; int k; for(i=0;i<3;i++) { if(i==2) break; } for(k=0;k<3;k++) { //do nothing } printf("i是%d/n",i); printf("k是%d/n",k); getchar(); }
结果: