[英]Bubble sort isn't working while sorting in ascending order
我创建了一个程序,它从用户那里寻找关于 5 位数字(使用 char 数据类型)的输入,并根据 if 语句中设置的参数,根据升序或降序对其进行冒泡排序。
案例 1:如果 (a[j] < a[j+1])
案例 2:如果 (a[j] > a[j+1])
下面是我的代码:
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
中的字符串的终止零字符'\0'
。
当在外循环中变量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]
中的字符交换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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.