Oppure

Loading
29/06/09 9:18
Daf
Io provo a implementarlo in pascal ma c'è una versione più leggibile:rofl: e magari in C++?
(se chiedo troppo solo in C ma con commenti)
aaa
29/06/09 10:09
Daf
PASCAL
unit OrdPascal;

interface

procedure ORDINA(vet: array of Integer, Inizio, Fine: Integer);

implementation

procedure SWAP(a, b: Pointer);
var
  aus: Pointer;
begin
  aus := a;
  a   := b;
  b   := aus;
end;

procedure ORDINA(vet: array of Integer, Inizio, Fine: Integer);
var
  I, max, min: Integer;
begin
  if(Inizio >= Fine)then
    Exit;
   min := Inizio;
   max := Fine;
   for I := Inizio to Fine do
   begin
     if(vet[I] > vet[max])then
       max := I
     else
       if(vet[I] < vet[min])then
         min := I;
   end;
   SWAP(@vet[min], @vet[Inizio]);
   if(max==Inizio)then
     max := min;
   SWAP(@vet[max], @vet[Fine]);
   ORDINA(vet, Inizio + 1, Fine - 1);
end;

C'è una cosa particolare: NON SERVONO LIBRERIE! :k:
aaa
29/06/09 10:13
Daf
Funzia anke su Delphi
aaa
29/06/10 21:07
MrC
Non per avvilire tutti coloro che in futuro tenteranno...

ma c'è una dimostrazione matematica (cioè certa)

che ogni algoritmo di ordinamento (a parte proprietà particolari dei dati)

non può avere una complessità asintotica migliore di O( n * log(n) )

:om:
aaa
30/06/10 17:02
eddiewrc
si, si chiama lower bound per comparison sort.
se un algoritmo di ordinamento basa il suo funzionamento sui confronti, per ordinare n elementi deve fare almeno n log n.

altri algoritmi ordinano in O(n) basandosi su altri stratagemmi
aaa
16/07/10 21:02
MrC
E io cos'ho detto?! :D
aaa