Я пытаюсь отсортировать, скажем, 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 . . .
Я не могу определить свою точную ошибку.
Не удалось воссоздать.
Вы можете прочитать это: Как отлаживать небольшие программы
Вы можете сделать правильный отступ в коде и избавиться от привычки писать void main. Функция main должна вернуть int.
@alk Спасибо за ссылку. Если вы согласны, я бы хотел удалить этот пост, так как он не по теме.
Я бы не проголосовал за закрытие этого вопроса как не по теме. Вы не уверены, что можете дать ответ на свой вопрос?





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, и код будет работать должным образом.
Когда у вас есть
i = 0,j=9разрешен на последней итерации цикла пузырьковой сортировки, поэтому вы получаете доступ к соседним элементамx[9]иx[10]. Последний не инициализируется во время цикла чтения.