c - C语言冒泡排序中额外零的问题

标签 c sorting bubble-sort

我正在尝试使用 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-1j<10-i-1 ,代码将按您的预期运行。

关于c - C语言冒泡排序中额外零的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51121613/

相关文章:

c++ - 扭曲的位图文件

java - 开发人员在构建手机应用程序之前应该了解什么?

c - 如何将使用数组的冒泡排序转换为双向链表?

c - C 程序中的搜索和排序?

java - 为冒泡排序执行计时

c - 使用 emacs c 代码自动换行的结构格式

c - 我的密码会编译但不会打印——我犯了什么错误?

node.js - 如何在 mongodb 和 NodeJS 查询中使用 limit

java - 带最后一个元素枢轴的就地快速排序?

sorting - 如何在mapreduce中按键和值排序?