Показать сообщение отдельно

  #596  
Старый 05.06.2008, 22:56
043nKRuT0y
Участник форума
Регистрация: 31.10.2007
Сообщений: 213
Провел на форуме:
394522

Репутация: 14
По умолчанию

Народ помогите решить проблему ! Вообщем приведенная ниже программа должна сортировать массив рандомных чисел ПИРАМИДАЛЬНЫМ методом.... Вообщем она и сортирует вот только чаще всего выбивает STACK OVERFLOV.... я там уже и функцию проверки на сортировку кинул штобы не вращалось слишком много и всеравно облом .... Вообщем код ниже кто сможет подправить укажите ошибку исправленным кодом !!!

Код:
{-$S}
Program Piramida;

Uses CRT;

Const
     max = 100;

Type myArray = array[0..max] of Integer;

Var dimension, i : Integer;
    arr, sortArray : myArray;
{***********************************\
                                      \**************************************}
Procedure Sift( Var arr : myArray; L, R : Integer );
Var i, j : Integer;
    item : Integer;
Begin
     i := L;
     j := 2*L;
     item := arr[L];
     If ( j < R ) And ( arr[j] < arr[j + 1] ) Then Begin
                                                        j := j + 1;
                                                   End;
     While ( j <= R ) And ( item < arr[j] ) do
      Begin
           arr[i] := arr[j];
           i := j;
           j := 2*j;
           If ( j < R ) And ( arr[j] < arr[j + 1] ) Then Begin
                                                              j := j + 1;
                                                         End;
      End;
     arr[i] := item;
End;
{***********************************\
                                      \**************************************}
Function Anti_Overflow( mas : myArray; rozmir : Integer) : Boolean;
Var
   i , j: Integer;
   max : Integer;
Begin
     For j := 0 To rozmir Do
     Begin
          max := mas[j];
          For i := 1 To rozmir+1 Do
          Begin
               If max > mas[i] Then Anti_Overflow := False
          End;
     End;
End;
{***********************************\
                                      \**************************************}
Procedure HeapSort( arr : myArray; size : Integer );
Var i, L, R : Integer;
    item : Integer;
Begin
     L := ( size div 2 );
     R := size - 1 ;
     While L > 0 do
     Begin
           L := L - 1;
           Sift( arr, L, R );
     End;
         While R > 0 do
         Begin
              item := arr[0];
              arr[0] := arr[R];
              arr[R] := item;
              R := R - 1;
              Sift( arr, L, R );
         End;
     If Anti_Overflow(arr,size) = False Then HeapSort (arr,size)
     Else Begin
               Write('Sorting array: ');
               For i := 0 To size-1 do
               Begin
                    Write( Arr[i] );
                    Write(' ');
               End;
          End;
End;
{***********************************\
                                      \**************************************}
Begin
     ClrScr;
     Write('Rozmirnist Masivu : ');
          ReadLn( dimension );
     Write('Enter ');Write( dimension );Write(' elements: ');
     Randomize;
     For i := 0 To dimension Do Begin
                                     arr[i] := Random(50);
                                     WriteLn(arr[i]);
                                End;
                                HeapSort( arr , dimension );
     WriteLn;
     WriteLn('Press "Enter" to continue...');
     ReadKey;
End.
 
Ответить с цитированием