Скобки, связанные со следующими тремя циклами For, заставляют функцию циклически вращаться,
void Bubblesort (char ulist[27], char slist[27], int n)
{
int i,j;
char temp;
for (i=1;i<=n;i++)
{
slist[i] = ulist[i];
for (j=1; j <= n-1 ;j++)
{
for (i = 1; i <=n-j;i++)
{
if (slist[i] < slist[i+1])
{
temp = slist[i];
slist[i] = slist[i+1];
slist[i+1] = temp;
}
}
}
}
}
Хотя без скобок; функция достигает конца.
void Bubblesort (char ulist[27], char slist[27], int n)
{
int i,j;
char temp;
for (i=1;i<=n;i++)
slist[i] = ulist[i];
for (j=1; j <= n-1 ;j++)
for (i = 1; i <=n-j;i++)
if (slist[i] < slist[i+1])
{
cout << "Step 4";
temp = slist[i];
slist[i] = slist[i+1];
slist[i+1] = temp;
}
}
Кто-нибудь сможет объяснить причину этого?
Вы изменили семантику цикла, и ваши отступы вводят в заблуждение.
void Bubblesort (char ulist[27], char slist[27], int n)
{
int i,j;
char temp;
for (i=1;i<=n;i++)
slist[i] = ulist[i];
for (j=1; j <= n-1 ;j++)
for (i = 1; i <=n-j;i++)
if (slist[i] < slist[i+1])
{
cout << "Step 4";
temp = slist[i];
slist[i] = slist[i+1];
slist[i+1] = temp;
}
}
следует отступом
void Bubblesort (char ulist[27], char slist[27], int n)
{
int i,j;
char temp;
for (i=1;i<=n;i++)
slist[i] = ulist[i];
for (j=1; j <= n-1 ;j++)
for (i = 1; i <=n-j;i++)
if (slist[i] < slist[i+1])
{
cout << "Step 4";
temp = slist[i];
slist[i] = slist[i+1];
slist[i+1] = temp;
}
}
Проблема в том, что без скобок у вас на самом деле нет вложенных циклов. рассматривать
for (i=1;i<=n;i++)
slist[i] = ulist[i];
for (j=1; j <= n-1 ;j++)
Без скобок только slist[i] =...
выполняется как часть первого цикла for. Второй цикл for выполняет как полностью отдельный объект
Как только циклы сгруппированы вместе, хотя внешние и внутренние большинство циклов используют одну и ту же индексную переменную. Их взаимные изменения в ценности замышляют создать бесконечный цикл. Попробуйте использовать переменную индекса для каждого цикла for
и это устранит проблему. Это работает без скобок, потому что начальная ошибка, которую я описал, заставляет первый и последний циклы не быть вложенными, поэтому они не манипулируют одним и тем же значением одновременно
Обе функции имеют разные алгоритмы. В первой функции у вас три вложенные циклы. И в третьем цикле используется один и тот же элемент управления "i" как первый цикл. Таким образом, циклы бесконечны, потому что после третьего цикла я всегда равно 2.
Во второй функции первый цикл представляет собой отдельный цикл, который является двумя другими петлями, не вложенными в первый цикл. Таким образом, изменяющаяся управляющая переменная "i" в третьем цикле не влияет на первый цикл.
for
используют одну и ту же индексную переменнуюi
. Для 3 циклов используйте 3 переменные, например,i
,j
,k
.