Недавно я пытался создать алгоритм пузырьковой сортировки на языке Pascal, однако после запуска программы на выходе оказались только 0 и 1. Интересно, что я сделал не так?
program BubbleSort;
const n = 9;
var
arr : array [0..n] of integer;
num, a, b, i, j, temp : integer;
begin
temp := 0;
for a := 0 to n do
begin
writeln('Please enter the ', a, '-th element in the array:');
readln(arr[a]);
end;
for i := 0 to (n - 1) do
begin
for j := 0 to (n - i - 1) do
begin
if (arr[j] > arr[j + 1]) then
begin
arr[j] := temp;
arr[j] := arr[j + 1];
arr[j + 1] := temp;
end;
end;
end;
writeln('The sorted array is as follows:');
for b := 0 to n do
begin
write(arr[b], ' ');
end;
end.
Поскольку я знаком с C# и Java, я изо всех сил старался объявить, что массив начинается с индекса 0, и это может быть причиной проблемы. Не имею представления.
Вы должны написать
temp := arr[j];
вместо
arr[j] := temp;
temp
присваивается только один раз со значением0
. Иarr[j] := temp;
напрасно, потому что сразу после него вы присваиваетеarr[j]
новое значение, переопределяя0
. По сути, вы устанавливаетеtemp
без причины на0
. Присвоение значений работает справа налево:variableToAssignValueTo := theNewValue
. Кто бы ни проголосовал за этот вопрос, ему не хватает основ программирования/Pascal. Сравните с wiki.freepascal.org/Bubble_sort и wiki.freepascal.org/Basic_Pascal_Tutorial/Chapter_1/…