with ada.integer_text_io, ada.text_io; use ada.integer_text_io, ada.text_io; procedure quick is MAX : constant integer := 10; type llista is array(1..MAX) of integer; actual : llista := (30,1,2,3,45,12,32,44,10,5); procedure quicksort ( a : in out llista; inf : in integer; sup : in integer ) is div : integer := a(sup); i : integer := inf; j : integer := sup - 1; temp : integer; count : boolean := true; limits : exception; begin -- comprovam que no hi hagi problemes amb els indexs if inf >= sup then raise limits; end if; while count loop while a(i) < div loop i := i + 1; end loop; while a(j) > div loop j := j - 1; end loop; if i < j then temp := a(i); a(i) := a(j); a(j) := temp; else count := false; end if; end loop; temp := a(i); a(i) := a(sup); a(sup) := temp; quicksort(a,inf,i-1); quicksort(a,i+1,sup); exception when limits => put_line("L'has liada un ou, l'index superior ha de ser major que l'inferior."); end quicksort; procedure mostra ( a : llista ) is begin for i in 1..MAX loop put(a(i),4); end loop; new_line; end mostra; begin mostra(actual); quicksort(actual,1,10); mostra(actual); end quick;