Informatică, întrebare adresată de nutzadamir12, 8 ani în urmă

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ăspunsuri la întrebare

Răspuns de iovitugeorge
0

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;


nutzadamir12: de ce asa lung?si ce inseamna sort(input,output),pivor,adica sunt multe cuvinte stranii parca
iovitugeorge: Am facut metoda quicksort/ citire/afisare... pivot e un nume de variabila. Quicksort-ul functioneaza altfel.
iovitugeorge: Se alege un element al listei, denumit pivot
Se reordonează lista astfel încât toate elementele mai mici decât pivotul să fie plasate înaintea pivotului și toate elementele mai mari să fie după pivot. După această partiționare, pivotul se află în poziția sa finală.
Se sortează recursiv sublista de elemente mai mici decât pivotul și sublista de elemente mai mari decât pivotul.
iovitugeorge: Sort e numele programului. Input trebuie pus pentru a folosi ReadLn (citirea), output trebuie pus pentru a folosi WriteLn (afisarea). Pentru unele versiunii de Pascal GNU este obtional
Alte întrebări interesante