C中冒泡排序中的额外零问题
Trouble with extra zero in bubble sort in C
我正在尝试使用 C 中的冒泡排序对 10 个整数进行升序排序。
这是我使用的代码:
#include<stdio.h>
void main()
{
int x[20],i,j;
float temp;
printf("Enter 10 values: \n");
for(i=0;i<10;i++)
{
printf("x[%d]: ",i+1);
scanf("%d",&x[i]);
}
for(i=0;i<10-1;i++)
{
for(j=0;j<=10-i-1;j++)
{
if(x[j]>x[j+1])
{
temp=x[j];
x[j]=x[j+1];
x[j+1]=temp;
}
}
}
printf("The sorted list in ascending order is \n");
for(i=0;i<10;i++)
{
printf("%5d",x[i]);
}
}
问题是,尽管我的 10 个整数只给出了非零条目,但我得到了一个额外的零作为输出。
这是我得到的输入和相应的输出。请注意,第二个输出给出零,值 19 已从排序列表中消失:
Enter 10 values:
x[1]: 4
x[2]: 2
x[3]: 7
x[4]: 4
x[5]: 8
x[6]: 2
x[7]: 3
x[8]: 9
x[9]: 13
x[10]: 19
The sorted list in ascending order is
2 0 2 3 4 4 7 8 9 13
--------------------------------
Process exited after 44.89 seconds with return value 5
Press any key to continue . . .
我找不到确切的错误。
for(i=0;i<10-1;i++)
{
for(j=0;j<10-i-1;j++)
{
if(x[j]>x[j+1])
{
temp=x[j];
x[j]=x[j+1];
x[j+1]=temp;
}
}
}
错误是当 i = 0 时内循环条件是 j<=10-0-1=9
,然后你比较 a[j] 和 a[j+1],但 a[j+1] 可能是 a[10 ]],数组从0到19开始,你只初始化了前10个整数(0-9),剩下的10个整数(10-19)是0,所以你的结果中会多出一个0。
将j<=10-i-1
更改为j<10-i-1
,代码将运行如您所愿。
我正在尝试使用 C 中的冒泡排序对 10 个整数进行升序排序。
这是我使用的代码:
#include<stdio.h>
void main()
{
int x[20],i,j;
float temp;
printf("Enter 10 values: \n");
for(i=0;i<10;i++)
{
printf("x[%d]: ",i+1);
scanf("%d",&x[i]);
}
for(i=0;i<10-1;i++)
{
for(j=0;j<=10-i-1;j++)
{
if(x[j]>x[j+1])
{
temp=x[j];
x[j]=x[j+1];
x[j+1]=temp;
}
}
}
printf("The sorted list in ascending order is \n");
for(i=0;i<10;i++)
{
printf("%5d",x[i]);
}
}
问题是,尽管我的 10 个整数只给出了非零条目,但我得到了一个额外的零作为输出。
这是我得到的输入和相应的输出。请注意,第二个输出给出零,值 19 已从排序列表中消失:
Enter 10 values:
x[1]: 4
x[2]: 2
x[3]: 7
x[4]: 4
x[5]: 8
x[6]: 2
x[7]: 3
x[8]: 9
x[9]: 13
x[10]: 19
The sorted list in ascending order is
2 0 2 3 4 4 7 8 9 13
--------------------------------
Process exited after 44.89 seconds with return value 5
Press any key to continue . . .
我找不到确切的错误。
for(i=0;i<10-1;i++)
{
for(j=0;j<10-i-1;j++)
{
if(x[j]>x[j+1])
{
temp=x[j];
x[j]=x[j+1];
x[j+1]=temp;
}
}
}
错误是当 i = 0 时内循环条件是 j<=10-0-1=9
,然后你比较 a[j] 和 a[j+1],但 a[j+1] 可能是 a[10 ]],数组从0到19开始,你只初始化了前10个整数(0-9),剩下的10个整数(10-19)是0,所以你的结果中会多出一个0。
将j<=10-i-1
更改为j<10-i-1
,代码将运行如您所愿。