有人可以帮助我吗?我尝试理解插入排序(在pascal中)。但我发现它真的很复杂。有人可以让我一个简单的代码:用户键入5个数字(数组),然后使用插入排序。这真的有助于我理解它。
这就是我现在所拥有的,但我不知道它是否正确:
Procedure InsertionSort(numbers : Array of Integer; size : Integer);
Var i, j, index : Integer
Begin
For i := 2 to size-1 do
Begin
index := numbers[i];
j := i;
While ((j > 1) AND (numbers[j-1] > index)) do
Begin
numbers[j] := numbers[j-1];
j := j - 1;
End;
numbers[j] := index;
End;
End.
答案 0 :(得分:2)
Pascal-Programming.info有以下插入排序算法作为pascal的示例。它们提供的示例与您的行的过程行完全相同。 (Pascal-Programming.info sort examples here):
Procedure InsertionSort(numbers : Array of Integer; size : Integer);
Var i, j, index : Integer
Begin
For i := 2 to size-1 do
Begin
index := numbers[i];
j := i;
While ((j > 1) AND (numbers[j-1] > index)) do
Begin
numbers[j] := numbers[j-1];
j := j - 1;
End;
numbers[j] := index;
End;
End.
如果您正在寻找测试插入排序的示例,我将上述代码放入下面的小程序中:
program InsertionSort;
Var x: Integer;
Var numbers : array[1..5] of Integer;
procedure InsertionSort(size : Integer );
Var i, j, index : Integer;
Begin
For i := 2 to size do
Begin
index := numbers[i];
j := i;
While ((j > 1) AND (numbers[j-1] > index)) do
Begin
numbers[j] := numbers[j-1];
j := j - 1;
End;
numbers[j] := index;
End;
End;
Begin
writeln('Insertion Example: ');
numbers[1] := 9001;
numbers[2] := 42;
numbers[3] := 32;
numbers[4] := 64;
numbers[5] := 2;
for x:= 0 to 5 do
writeln('unsorted[', x, '] = ', numbers[x] );
InsertionSort(5);
writeln('=== sorted ===');
for x:= 0 to 5 do
writeln('sorted[', x, '] = ', numbers[x] );
End.
这是您在上面发布的排序算法的实现。这里只有两个主要区别:
Var numbers : array[1..5] of Integer;
,以便我们可以轻松地对其进行测试。procedure InsertionSort(size : Integer );
我已使用Free Pascal在本地测试了此代码。如果您想了解有关实施排序的更多信息,我建议this guide on sorting in pascal。