在之前笔者感觉对i++和++i还是挺清楚的,但是前几天在看一个教学视频时,其中有一个代码例子,前后分别用的i++和++i,就是笔者上一篇文章中写的快速排序法的代码。
while(l<r)//大的条件是l<r,即左边界要小于右边界
{
//内层分隔处理,左右各自处理
while(array[l]<pivot) {l++;}
while(array[r]>pivot) {r--;}
//如果在上面两个循环退出时,l>=r,则表示pivot的左边都比pivot小,右边都比pivot大,此轮排序目的达到,即将array分为两部分
if(l>=r) break;
//如果上面条件不成立,则将上面while循环找出的不符合条件的左右元素对调,目的也是向把array分为两部分靠拢
tempArray = array[l];
array[l] = array[r];
array[r] = tempArray;
//有可能存在array[l] or array[r]正好就是pivot,此时可在对调之后直接越过此元素,此时可以返回顶层while去检查l<r是否为true
if(array[l]==pivot) {r--;}
if(array[r]==pivot) {l++;}
}
这里只截取其中一段,原例子中上面用的l++, r-- ; 下面用的是 --r,++l ; 当时恍惚了一下,这个有区别吗?
我带着疑问去查了些资料,又在此快速排序代码实验了一下,反正我是没看出在这里用l++和++l有什么区别,请各位同仁指教一二。
下面写一下我自己对i++和++i简便的理解:
1. ++i 与 i++ 在运算表达式中出现,才会由于前++与后++ 同其他运算符的优先级不同而有区别;
2. 如果++i 与 i++ 作为单独的表达式,即其前后都有";", 或者单独作为循环体/分支执行语句, 那在这个语句执行过后,i 值都是一样的,没有区别;
语句可能不够严谨,仅表达这个意思;个人拙见,还请不吝赐教!