以下是我写的插入排序代码
#include<stdio.h>
#include<conio.h>
void main()
{
int i, j, a[10], temp, f = 0, k = 0;
clrscr();
printf("\n\t\t\t\tINSERTION SORT\nEnter the Array:-\n");
for (i = 0; i <= 9; i++)
scanf("%d", &a[i]);
for (i = 0; i <= 9; i++) // 1st for loop
{
temp = a[i];
for (j = 0; j <= i - 1; j++) // 2nd for loop
{
f = 0;
if (a[i]<a[j]) // if loop
{
for (k = i - 1; k >= j; k--) // 3rd for loop
a[k + 1] = a[k];
a[k + 1] = temp;
break; // break statement
}
}
}
printf("\nThe sorted array is:-\n");
for (i = 0; i <= 9; i++)
printf("%d\n", a[i]);
getch();
}
我被告知break语句会停止特定时刻( nth 当前运行最内层循环的时间&amp;启动其下一个实例( n + 1 time)。所以在这里我很困惑,这里的break语句是否会停止第三个循环或条件。但是我被告知它会影响第二个循环。
这里的任何人都可以告诉我哪个for循环会产生影响。
答案 0 :(得分:4)
break
将停止循环,而不是if语句。
所以这里:
for (i = 0; i <= 9; i++) // 1st for loop
{
temp = a[i];
for (j = 0; j <= i - 1; j++) // 2nd for loop
{
f = 0;
if (a[i]<a[j]) // if STATEMENT
{
for (k = i - 1; k >= j; k--) // 3rd for loop
a[k + 1] = a[k];
a[k + 1] = temp;
break; // break statement
}
}
}
,假设i
的值为0,当break
执行时,阻止第二个循环再次执行,您将退出该循环。因此,您将在第一个循环中再次进行,其中将开始新的迭代,i
等于1.
您所描述的内容建议使用continue
关键字,该关键字仅与循环有关,它不会直接影响if语句。
在上面的代码中,如果使用continue
语句而不是break
语句,那么您将跳过该迭代(意味着{{1}以下没有任何内容将被执行),并继续第二个循环的下一次迭代(给continue
增加一个值)。但是,在你的代码中,没有任何内容,因此它不会有任何区别。
PS:
此评论错误:
j
if语句不是循环。