如何在pascal数组中使用插入排序

时间:2015-01-25 11:41:15

标签: pascal freepascal

有人可以帮助我吗?我尝试理解插入排序(在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.

1 个答案:

答案 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.

这是您在上面发布的排序算法的实现。这里只有两个主要区别:

  1. 我不再传递要按值排序的数组,而是使用全局定义的数组Var numbers : array[1..5] of Integer;,以便我们可以轻松地对其进行测试。
  2. 然后我只将数组的大小传递给InsertionSort过程procedure InsertionSort(size : Integer );
  3. 我已使用Free Pascal在本地测试了此代码。如果您想了解有关实施排序的更多信息,我建议this guide on sorting in pascal