C语言 for 循环 索引值进行了互换 再次循环时 是从新的数组索引开始 还是原的数组索引开始?

最近在写一些C语言的单片机开发代码和项目。期间对于一些排序的算法有些分析,其中一些排序的算法涉及到一些一些数据的外层循环和内层循环,而C语言 for循环索引值在进行了逻辑判断互换后,当进入第二次循环时,我猜想很多新手程序员,不清楚是从新的数组索引开始,还是还是从原的数组索引开始?这应该是很多新手会遇到的一些问题。

我们考虑写这样的一个demo,来进行分析,希望对新手程序员有所帮助。

以下是一段c语言写的一个选择排序的算法:

#include<stdio.h>

int main(){
	int i,j;
	int a[10];
	int iPos;
	int iTemp;
	printf("为数组元素赋值:\n");
	

	//输入获得数组
	for(i=0; i<10; i++){
		printf("a[%d]=",i);
		scanf("%d",&a[i]);		
	}



	//进行逻辑判断   从以上进行分析
	for(i=0; i<9; i++){

		iTemp = a[i];
		iPos=i;
		for(j=i+1; j<10; j++){ //内循环
			if(a[j]<iTemp){ 
				iTemp = a[j];
				iPos = j;

			}
		}
		a[iPos] = a[i];
		a[i] = iTemp;
	}


	//输出结果  
	printf("输出结果如下:、\n");

	for(i=0; i<10; i++){
		printf("%d\t",a[i]);
		if(i==4)
			printf("\n");
	}
	printf("\n");
	return 0;
}

我对这个逻辑判断的过程序进行了一个分析如下:

65 45 32 13 67 98 75 42 18 23
65 45 32 13 67

4+1

第一次循环逻辑判断

//进行逻辑判断   从以上进行分析
	for(i=0; i<4; i++){    // i =0 i<4     i=0

		iTemp = a[i];   // iTemp = a[0] iTemp = 65    i = 0
		iPos=i;   // iPos = 0;    i =0  iTemp = 65 iPos = 0
		for(j=i+1; j<5; j++){  //内循环 j=0+1 1<5     j =1  i =0  iTemp = 65 iPos = 0
			if(a[j]<iTemp){   //如果 a[1]< 65  45<65成立继续  不成立退出
				iTemp = a[j];  // iTemp = a[1]  iTemp = 45;   j =1  i =0  iPos = 0
				iPos = j;  // iPos = 1;       j =1  i =0  iPos = 0
			}
		}
		a[iPos] = a[i]; // a[1] = a[0]     a[1]= 65 
		a[i] = iTemp; // a[0] = a[1]      a[0] = 45  

// i = 0 j=1 
//65 45 32 13 67
//第一次 45 65 32 13 67 
//第二次
	}

第二次循环逻辑判断
//再次循环时 先执行i++   i=1    j=1
//进行逻辑判断   从以上进行分析
	for(i=0; i<4; i++){    // i =1  1<4     i=1

		iTemp = a[i];   // iTemp = a[1]   iTemp =65     i = 1
		iPos=i;   // iPos = 1;     i =1  iTemp = 65   iPos =1 
		for(j=i+1; j<5; j++){  //内循环 j=1+1  2<5     j =2  i =1  iTemp = 65  iPos = 1
			if(a[j]<iTemp){   //如果 a[2]< 65  32<65成立继续  不成立退出
				iTemp = a[j];  // iTemp = a[2]    iTemp = 32;   j =2  i =1  iPos = 1
				iPos = j;  // iPos = 2;       j =2  i =1  iPos = 1
			}
		}
		a[iPos] = a[i]; // a[2] = a[1]     a[2]= 32 
		a[i] = iTemp; // a[1] = a[2]     a[1] = 65  

// i = 0 j=1 
//65 45 32 13 67
//第一次 45 65 32 13 67 
//第二次 45 32 65 13 67 

}


第三次循环逻辑判断
//i =1  j =2  再次循环时 先执行i++   i=2    j=2
//进行逻辑判断   从以上进行分析
	for(i=0; i<4; i++){    // i =2  2<4     i=2

		iTemp = a[i];   // iTemp = a[2]   iTemp =65     i = 2
		iPos=i;   // iPos = 2;     i =2  iTemp = 65   iPos =2 
		for(j=i+1; j<5; j++){  //内循环 j=2+1  3<5     j =3  i =2  iTemp = 65  iPos = 2
			if(a[j]<iTemp){   //如果 a[3]< 65  13<65 成立继续  不成立退出    j =3  i =2  iTemp = 65  iPos = 2

				  iTemp = a[j];   // iTemp = a[j]   a[3]   13;   j =3  i =2  iPos = 2
				  iPos = j;      // j =3  i =2  iPos = 3 
			}
		}

//内循环中,如果判断不成立,则再执行,外层for循环, 

		a[iPos] = a[i]; // a[3] = a[2]     a[3]= 65
		a[i] = iTemp; // a[2] = 13     a[2] = 13 

// i = 0 j=1 
//65 45 32 13 67
//第一次 45 65 32 13 67 
//第二次 45 32 65 13 67
//第三次 45 32 13 65 67
//第四次 
}



第四次循环逻辑判断
// j =3  i =2  iPos = 3   再次循环时 先执行i++   i=3    j=3
//进行逻辑判断   从以上进行分析
	for(i=0; i<4; i++){    // i =3  3<4     i=3

		iTemp = a[i];   // iTemp = a[3]   iTemp =65     i = 3
		iPos=i;   // iPos = 3;     i =3  iTemp = 65   iPos =3 
		for(j=i+1; j<5; j++){  //内循环 j=3+1  4<5     j =4  i =3  iTemp = 65  iPos = 3
			if(a[j]<iTemp){   //如果 a[4]< 65  67<65 成立继续  不成立退出    j =3  i =2  iTemp = 65  iPos = 2

				  iTemp = a[j];   // iTemp = a[j]   a[3]   13;   j =3  i =2  iPos = 2
				  iPos = j;      // j =3  i =2  iPos = 3
			}
		}

//内循环中,如果判断不成立,则再执行,外层for循环, 

		a[iPos] = a[i]; // a[3] = a[2]     a[3]= 65
		a[i] = iTemp; // a[2] = 13     a[2] = 13 

// i = 0 j=1 
//65 45 32 13 67
//第一次 45 65 32 13 67 
//第二次 45 32 65 13 67
//第三次 45 32 13 65 67
}



通过以上的代码分析很清楚的会发现

for循环在互换索引值后,再次循环时是从新的数组索引开始。

在大多数编程语言中,包括Python,for循环遍历列表或数组时,通常是从第一个元素开始,而不是从索引开始。这是因为列表或数组的元素是通过它们的值来遍历的,而不是通过它们的索引。例如,在Python中,使用for循环遍历列表时,你不需要指定索引,因为循环会自动处理列表中的每个元素‌1。

如果你需要在循环中同时获取元素及其索引,你可以使用特定的语法来实现。例如,在Vue.js中,你可以使用v-for指令来同时遍历数组的元素和索引。在这种情况下,你可以通过添加一个圆括号来同时获取元素和它的索引。但是,这并不会改变原始数组的索引顺序,你仍然是从原始的索引开始遍历‌2。

如果你对数组或列表进行了修改,比如互换了索引值,那么再次进行for循环时,你将从修改后的数组或列表开始遍历。这是因为for循环遍历的是当前状态的数据,而不是之前的数据状态。如果你在循环过程中修改了数据(例如,通过互换索引值),那么这些修改将影响后续的循环迭代‌3。

总的来说,for循环在遍历列表或数组时,默认是从第一个元素开始,而不是从索引开始。如果你需要同时处理元素和它们的索引,或者对列表进行修改后再次进行循环,你需要使用特定的语法或方法来实现这一点。

分类:

发表评论

邮箱地址不会被公开。