按升序排序时冒泡排序不起作用
Bubble sort isn't working while sorting in ascending order
我创建了一个程序,它从用户那里寻求有关 5 位数字的输入(使用 char 数据类型),并根据 if 语句中设置的参数,根据升序或降序对它进行冒泡排序。
案例 1:如果 (a[j] < a[j+1])
- 输入:12345
- 期望输出:54321
- 输出:12345 - 有效
案例 2:如果 (a[j] > a[j+1])
- 输入:54321
- 期望输出:12345
- 无效。
下面是我的代码:
int main()
{
char a[6];
int i, temp;
int j = 0;
printf("Enter a 5 digit number\n");
scanf("%s", a);
printf("You entered : %s\n", a);
for ( i = 0 ; i < 5 ; i++ )
{
for ( j = 0 ; j < 6 - 1 - i ; ++j )
{
if ( a[j] > a[j+1] )
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
printf("Bubble Sorted number : %s\n", a);
return 0;
}
这个内部for循环
for ( j = 0 ; j < 6 - 1 - i ; ++j )
{
if ( a[j] > a[j+1] )
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
可以覆盖数组a
中存储的字符串的终止零字符'[=13=]'
。
当在外循环中变量 i
等于 0
那么你实际上有以下内循环
for ( j = 0 ; j < 5 ; ++j )
{
if ( a[j] > a[j+1] )
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
在这种情况下,当循环中的 j
等于 4
时,与 a[5]
相同的表达式 a[j+1]
将产生终止零字符将与存储在数组元素 a[4]
.
中的字符交换
重写内循环
for ( j = 1 ; j < 6 - 1 - i ; ++j )
{
if ( a[j-1] > a[j] )
{
temp = a[j-1];
a[j-1] = a[j];
a[j] = temp;
}
}
我创建了一个程序,它从用户那里寻求有关 5 位数字的输入(使用 char 数据类型),并根据 if 语句中设置的参数,根据升序或降序对它进行冒泡排序。
案例 1:如果 (a[j] < a[j+1])
- 输入:12345
- 期望输出:54321
- 输出:12345 - 有效
案例 2:如果 (a[j] > a[j+1])
- 输入:54321
- 期望输出:12345
- 无效。
下面是我的代码:
int main()
{
char a[6];
int i, temp;
int j = 0;
printf("Enter a 5 digit number\n");
scanf("%s", a);
printf("You entered : %s\n", a);
for ( i = 0 ; i < 5 ; i++ )
{
for ( j = 0 ; j < 6 - 1 - i ; ++j )
{
if ( a[j] > a[j+1] )
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
printf("Bubble Sorted number : %s\n", a);
return 0;
}
这个内部for循环
for ( j = 0 ; j < 6 - 1 - i ; ++j )
{
if ( a[j] > a[j+1] )
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
可以覆盖数组a
中存储的字符串的终止零字符'[=13=]'
。
当在外循环中变量 i
等于 0
那么你实际上有以下内循环
for ( j = 0 ; j < 5 ; ++j )
{
if ( a[j] > a[j+1] )
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
在这种情况下,当循环中的 j
等于 4
时,与 a[5]
相同的表达式 a[j+1]
将产生终止零字符将与存储在数组元素 a[4]
.
重写内循环
for ( j = 1 ; j < 6 - 1 - i ; ++j )
{
if ( a[j-1] > a[j] )
{
temp = a[j-1];
a[j-1] = a[j];
a[j] = temp;
}
}