👤

Va rog cei care inteleg bine programele in pascal.Problema suna astfel :
Se da un vector cu minim 100 elemente.Sa se ordoneze crescator vectorul.Am nevoie urgent,dau funda !!


Răspuns :

Buna, acesta este algoritmul.

Sa imi spui te rog daca nu intelegi ceva.


PROGRAM Sort(input, output);

   CONST

       { Dimensiunea maxima }

       MaxElts = 100;

   TYPE  

       { Tipul elementelor array-ului}

       IntArrayType = ARRAY [1..MaxElts] OF Integer;

   VAR

       { Variabile de manevra }

       i, size: integer;

       { Un array de int-uri }

       arr: IntArrayType;

   { Se citesc datele }

   PROCEDURE ReadArray(VAR size: Integer; VAR a: IntArrayType);

       BEGIN

           size := 1;

           WHILE NOT eof DO BEGIN

               readln(a[size]);

               IF NOT eof THEN  

                   size := size + 1

           END

       END;

Procedure QSort(numbers : IntArrayType; left : Integer; right : Integer);

Var  

pivot, l_ptr, r_ptr : Integer;

Begin

l_ptr := left;

r_ptr := right;

pivot := numbers[left];

While (left < right) do

Begin

 While ((numbers[right] >= pivot) AND (left < right)) do

  right := right - 1;

 If (left <> right) Then

 Begin

  numbers[left] := numbers[right];

  left := left + 1;

 End;

 While ((numbers[left] <= pivot) AND (left < right)) do

  left := left + 1;

 If (left <> right) Then

 Begin

  numbers[right] := numbers[left];

  right := right - 1;

 End;

End;

numbers[left] := pivot;

pivot := left;

left := l_ptr;

right := r_ptr;

If (left < pivot) Then

 QSort(numbers, left, pivot-1);

If (right > pivot) Then

 QSort(numbers, pivot+1, right);

End;

Procedure QuickSort(numbers :IntArrayType; size : Integer);

Begin

 { Citire }

       ReadArray(size, arr);

       {Sortare }

      QSort(arr, 0, MaxElts-1);

       { Afisare }

       FOR i := 1 TO size DO

        writeln(arr[i])

End;