Implementazioni di algoritmi/Merge sort: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 343:
</source>
 
 
===[[w:Linguaggio di programmazione Java|Java]]===
 
<source lang="ABAP">
 
REPORT zab.
 
DATA: BEGIN OF a OCCURS 0,
numero TYPE i,
END OF a.
 
DATA ls_a LIKE LINE OF a.
 
DATA left TYPE i.
DATA right TYPE i.
 
 
ls_a-numero = 1.
APPEND ls_a TO a.
ls_a-numero = 111.
APPEND ls_a TO a.
ls_a-numero = 41.
APPEND ls_a TO a.
ls_a-numero = 16.
APPEND ls_a TO a.
ls_a-numero = 81.
APPEND ls_a TO a.
ls_a-numero = 4.
APPEND ls_a TO a.
 
left = 0.
DESCRIBE TABLE a LINES right.
right = right - 1.
 
LOOP AT a INTO ls_a.
WRITE:/ ls_a-numero.
ENDLOOP.
 
 
 
 
PERFORM mergesort TABLES a USING left right.
 
LOOP AT a INTO ls_a.
WRITE:/ ls_a-numero.
ENDLOOP.
 
 
 
 
FORM mergesort TABLES a STRUCTURE ls_a USING VALUE(left) VALUE(right).
IF left < right .
DATA center TYPE i.
DATA center_piu_1 TYPE i.
center = ( left + right ) DIV 2.
center_piu_1 = center + 1.
PERFORM mergesort TABLES a USING left center.
PERFORM mergesort TABLES a USING center_piu_1 right .
PERFORM merge TABLES a USING left center right.
ENDIF.
ENDFORM.
 
FORM merge TABLES a STRUCTURE ls_a USING VALUE(left) VALUE(center)
VALUE(right).
DATA i TYPE i.
DATA j TYPE i.
DATA k TYPE i.
DATA i_piu_1 TYPE i.
DATA j_piu_1 TYPE i.
DATA k_piu_1 TYPE i.
DATA k_meno_left_piu_1 TYPE i.
DATA b LIKE ls_a OCCURS 0.
DATA ls_b LIKE LINE OF b.
DATA ls_a_j LIKE LINE OF a.
DATA ls_a_i LIKE LINE OF a.
 
 
i = right - left + 1.
DO i TIMES.
APPEND INITIAL LINE TO b.
ENDDO.
 
i = left.
j = center + 1.
k = left.
 
 
 
 
 
WHILE i <= center AND j <= right.
i_piu_1 = i + 1.
READ TABLE a INDEX i_piu_1 INTO ls_a_i.
j_piu_1 = j + 1.
READ TABLE a INDEX j_piu_1 INTO ls_a_j.
 
 
 
IF ls_a_i-numero <= ls_a_j-numero.
k_meno_left_piu_1 = k - left + 1.
MODIFY b INDEX k_meno_left_piu_1 FROM ls_a_i.
 
i = i + 1.
ELSE.
k_meno_left_piu_1 = k - left + 1.
MODIFY b INDEX k_meno_left_piu_1 FROM ls_a_j.
 
j = j + 1.
ENDIF.
k = k + 1.
ENDWHILE.
 
WHILE i <= center.
k_meno_left_piu_1 = k - left + 1.
i_piu_1 = i + 1.
READ TABLE a INDEX i_piu_1 INTO ls_a_i.
MODIFY b INDEX k_meno_left_piu_1 FROM ls_a_i.
i = i + 1.
k = k + 1.
ENDWHILE.
 
WHILE j <= right.
k_meno_left_piu_1 = k - left + 1.
j_piu_1 = j + 1.
READ TABLE a INDEX j_piu_1 INTO ls_a_j.
MODIFY b INDEX k_meno_left_piu_1 FROM ls_a_j.
j = j + 1.
k = k + 1.
 
ENDWHILE.
 
k = left.
WHILE k <= right.
k_meno_left_piu_1 = k - left + 1.
READ TABLE b INDEX k_meno_left_piu_1 INTO ls_b.
i_piu_1 = k + 1.
MODIFY a INDEX i_piu_1 FROM ls_b.
k = k + 1.
ENDWHILE.
ENDFORM.
 
</source>
== Altri progetti ==
{{interprogetto|w=Merge sort|w_etichetta=questo algoritmo}}