📜  嵌套循环拼图

📅  最后修改于: 2021-05-26 02:38:04             🧑  作者: Mango

以下两个代码段中哪个更快?假设编译器没有进行任何优化。

C
/* FIRST */
for(i=0;i<10;i++)
  for(j=0;j<100;j++)
    //do something


C
/* SECOND */
for(i=0;i<100;i++)
  for(j=0;j<10;j++)
    //do something


CPP
//program to count number of increment
//operations in FIRST and SECOND
#include
 
using namespace std;
 
int main()
{
  int c1 = 0, c2 = 0;
    
  /* FIRST */
  for(int i=0;i<10;i++,c1++)
    for(int j=0;j<100;j++, c1++);
      
    
  /* SECOND */
  for(int i=0; i<100; i++, c2++)
      for(int j=0; j<10; j++, c2++);
         
 
  cout << " Count in FIRST = " <CPP
//program to count the number of comparison
//operations executed by FIRST and SECOND */
#include
 
using namespace std;
 
int main()
{
   int c1 = 0, c2 = 0;
     
   /* FIRST */
   for(int i=0; ++c1&&i<10; i++)
      for(int j=0; ++c1&&j<100;j++);
      
 
   /* SECOND */
   for(int i=0; ++c2&&i<100; i++)
      for(int j=0; ++c2&&j<10; j++);
       
 
   cout << " Count fot FIRST  " <


C

/* SECOND */
for(i=0;i<100;i++)
  for(j=0;j<10;j++)
    //do something

两个代码段提供相同的功能,并且两个for循环内的代码在两个代码段中将执行相同的次数。
如果我们仔细观察,可以发现SECOND比FIRST执行更多的操作。与FIRST的相应部分相比,它执行for循环的所有三个部分(赋值,比较和增量)的次数更多:

  1. 第二个执行分配操作(j = 0或i = 0)101次,而第一个仅执行11次。
  2. 第二个进行101 + 1100个比较(i <100或j <10),而第一个进行11 + 1010个比较(i <10或j <100)。
  3. 第二个执行1100个增量运算(i ++或j ++),而第一个执行1010个增量运算。

下面的C++代码对在FIRST和SECOND中执行的增量操作的数量进行计数,并打印计数。

CPP

//program to count number of increment
//operations in FIRST and SECOND
#include
 
using namespace std;
 
int main()
{
  int c1 = 0, c2 = 0;
    
  /* FIRST */
  for(int i=0;i<10;i++,c1++)
    for(int j=0;j<100;j++, c1++);
      
    
  /* SECOND */
  for(int i=0; i<100; i++, c2++)
      for(int j=0; j<10; j++, c2++);
         
 
  cout << " Count in FIRST = " <输出:
Count in FIRST = 1010
 Count in SECOND  = 1100

下面的C++代码计算了FIRST和SECOND执行的比较操作的数量

CPP

//program to count the number of comparison
//operations executed by FIRST and SECOND */
#include
 
using namespace std;
 
int main()
{
   int c1 = 0, c2 = 0;
     
   /* FIRST */
   for(int i=0; ++c1&&i<10; i++)
      for(int j=0; ++c1&&j<100;j++);
      
 
   /* SECOND */
   for(int i=0; ++c2&&i<100; i++)
      for(int j=0; ++c2&&j<10; j++);
       
 
   cout << " Count fot FIRST  " <
输出:
Count fot FIRST  1021
 Count fot SECOND  1201
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。