
05.06.2008, 22:56
|
|
Участник форума
Регистрация: 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.
|
|
|