Somn de somn

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Somnul este un algoritm de sortare bazat pe timp.

Sortarea în repaus funcționează prin asocierea unui contor la fiecare element de sortat. Fiecare contor este setat inițial cu valoarea articolului de sortat. Contoare sunt apoi decrementate în același ritm. Când un contor dat se termină, elementul asociat este adăugat la sfârșitul listei. Deoarece contoare se opresc în funcție de dimensiunea elementelor, lista va fi sortată după oprirea tuturor contoarelor.

Poate fi implementat folosind cronometrele sistemului de operare, de exemplu prin bifurarea unui proces separat pentru fiecare element sau mai simplu folosind un vector de contoare.

Cod

Bash

 #! / bin / bash
funcția f () {
    dormiți  1 $ 
    ecou  $ 1 
}
în timp ce [ -n " $ 1 " ]
do
    f " $ 1 " &
    schimb
Terminat
aștepta

Piton

 din timp import somn
din threading Timer de import

def sleepsort ( valori ):
    somn . rezultat = []
    def add1 ( x ):
        somn . rezultat . anexa ( x )
    mx = valori [ 0 ]
    pentru v în valori :
        dacă mx < v : mx = v
        Temporizator ( v , add1 , [ v ]) . start ()
    somn ( mx + 1 )
    print ( sleepsort . rezultat )

dacă __name__ == '__main__' :
	somn ([ 7 , 2 , 100 , 1 , 9 , 45 , 2 , 33 , 7 , 77 , 25 ])
	somn ([ 333 , 222 , 112 , 777 , 901 , 455 , 256 , 313 , 125 , 625 , 825 , 999 , 316 ])

JAVA

clasă publică SleepSort {  
    public static void main ( String [] args ) {  
        int [] ints = { 1 , 4 , 7 , 3 , 8 , 9 , 2 , 6 , 5 };  
        SortThread [] sortThreads = new SortThread [ ints . lungime ] ;  
        for ( int i = 0 ; i < sortThreads . length ; i ++ ) {  
            sortThreads [ i ] = new SortThread ( ints [ i ] );  
        }  
        for ( int i = 0 ; i < sortThreads . length ; i ++ ) {  
            sortThreads [ i ] . start ();  
        }  
    }  
}  
clasa SortThread extinde firul {  
    int ms = 0 ;  
    public SortThread ( int ms ) {  
        aceasta . ms = ms ;  
    }  
    public void run () {  
        incearca {  
            somn ( ms * 10 + 10 );  
        } catch ( InterruptedException e ) {  
            // TODO Bloc de captare generat automat
            și . printStackTrace ();  
        }  
        Sistem . afară . println ( ms );  
    }  
}

Elemente conexe