你是不是也遇到过这种情况:定义了一个数组,想遍历所有元素却总漏掉最后一个?或者写了排序代码,运行后数组反而更乱了?用循环处理数组时,这些问题太常见了。今天兔子哥就带着大家,从遍历、排序到筛选,一步步学会用循环高效处理数组,全是实战干货,一起往下看吧!
► 数组遍历到底要注意啥?为啥总多算或者少算元素?
遍历就是逐个访问数组元素,这是处理数组的基础。用 for 循环遍历最方便,比如 int arr [5] = {1,2,3,4,5}; for (int i=0; i<5; i++) { printf ("% d", arr [i]); }。这里要注意,数组下标从 0 开始,所以 i 得从 0 算起,循环条件是 i<5 而不是 i<=5,不然就会访问到 arr [5],这可是越界了。
有朋友说,用 while 循环遍历行不行?当然行,int i=0; while (i<5) { printf ("% d", arr [i]); i++; },效果一样。但为啥推荐 for 循环?因为它把初始化、条件、增量写在一行,不容易忘写 i++,要是 while 循环里漏了 i++,就成死循环了。
要是遍历二维数组呢?就得用嵌套循环,外层控制行,内层控制列。int arr [2][3] = {{1,2,3},{4,5,6}}; for (int i=0; i<2; i++) { for (int j=0; j<3; j++) { printf ("% d", arr [i][j]); } printf ("\n"); }。记住内层循环的条件是列数,别写成行数了,不然数据就打印乱了。
► 用循环给数组排序,冒泡排序怎么写才不出错?
排序里最容易上手的就是冒泡排序,原理是每次比较相邻元素,把大的往后移,就像气泡往上冒。比如给 int arr [5] = {3,1,4,2,5} 排序,用两层 for 循环就行。
外层循环控制排序轮数,for (int i=0; i<4; i++),因为 5 个元素只需要 4 轮。内层循环负责比较交换,for (int j=0; j<4-i; j++),这里 j<4-i 是关键,每轮结束后最大的元素已经到位,不用再比较了。然后 if (arr [j] > arr [j+1]),就交换它们的值。
有朋友写的时候,把内层循环条件写成 j<5,结果每次都比较到最后一个元素,多做了无用功。还有人忘了写交换的代码,循环跑完数组一点没变。兔子哥教你个办法,写的时候在交换的地方加个 printf,看看每次循环后数组的变化,就能问题一眼就能看出来。
► 怎么用循环筛选数组元素?比如找出所有偶数或者大于 10 的数
筛选就是从数组里挑出符合条件的元素,这时候循环里加 if 判断就行。比如要从 int arr [6] = {2,5,8,11,14,17} 里找出偶数,用 for 循环遍历,每次个元素判断是不是偶数。
for (int i=0; i<6; i++) { if (arr [i]%2 == 0) { printf ("% d", arr [i]); } }。这里要注意运算符优先级,% 的优先级比 == 高,不用加括号,但写成 (arr [i]%2) == 0 更清楚。
要是想把筛选结果存到另一个数组里呢?可以定义一个新数组,再加个下标计数器。int res [6], k=0; for (int i=0; i<6; i++) { if (arr [i]%2 == 0) { res [k++] = arr [i]; } }。这样 res 数组里就都是偶数了,k 还记录了个数。有朋友会问,要是初始化为 0 行吗?必须的,不然 k 的值不确定,可能会存在脏数据。
► 处理大数据组时,循环效率怎么提高?
要是数组很大,比如有 10000 个元素,循环写得不好就会很慢。比如嵌套循环里别做重复计算,像 for (int i=0; i<10000; i++) { for (int j=0; j
其实用循环处理数组,关键就是把下标和循环条件搞清楚,多想想边界情况。刚开始练的时候,别怕写得麻烦,哪怕用笨办法先实现功能,再慢慢优化。兔子哥刚开始写冒泡排序,总把内层循环的次数写错,后来拿个小数组一步步模拟循环过程,才彻底搞明白。
总之,遍历要注意下标范围,排序要理清楚内外循环的逻辑,筛选要写对判断条件。多敲几个例子,遇到问题就用 printf 打印中间结果,很快就能熟练起来。希望这些技巧能帮到你,下次处理数组的时候试试,肯定比以前顺多了。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~