Проблема с дополнительным нулем в пузырьковой сортировке в C - PullRequest
0 голосов
/ 01 июля 2018

Я пытаюсь отсортировать, скажем, 10 целых чисел в порядке возрастания, используя пузырьковую сортировку в C.

Это код, который я использую:

#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 . . .

Я не могу найти свою точную ошибку.

1 Ответ

0 голосов
/ 01 июля 2018
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, тогда вы сравниваете [j] и [j + 1], но [j + 1] может быть [10], массивом начинается с 0 до 19, и вы инициализировали только первые 10 целых чисел (0-9), левые 10 целых чисел (10-19) равны 0, поэтому в вашем результате будет дополнительный 0.

измените j<=10-i-1 на j<10-i-1, и код будет работать так, как вы ожидаете.

...