Somn de somn
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 );
}
}