i n v i q a G r o u p = [ ' I n v i q a ' , ' S e n s i o L a b s U K ' , ' S e s s i o n D i g i t a l ' ] ; $ s o c i a l = [ ' b l o g ' = > ' h t t p : / / m e r e w o o d . o r g ' , ' f a c e b o o k ' = > $ t h i s - > g r a p h S e a r c h ( ' p e o p l e i a m s t a l k i n g ' ) , ' g i t h u b ' = > ' h t t p s : / / g i t h u b . c o m / r o w a n - m ' , ' g o o g l e + ' = > ' h t t p s : / / p l u s . g o o g l e . c o m / 1 1 1 8 1 3 8 4 5 7 2 7 0 0 5 1 6 0 1 6 4 ' , ' i d e n t i c a ' = > ' h t t p : / / i d e n t i . c a / r o w a n m ' , ' i m d b ' = > ' h t t p : / / i m d b . c o m / n a m e / n m 1 4 1 2 3 4 8 ' , ' t w i t t e r ' = > ' h t t p s : / / t w i t t e r . c o m / r o w a n _ m ' , ] ;
portion may change STABILITY 4 : A 1 : A 1 : B 3 : A 2 : A 3 : B 2 : B 2 : C 1 1 : A 1 : B 2 : A 2 : B 2 : C 3 : A 3 : B 4 : B 2 4 : A 1 : A 1 : B 3 : A 2 : A 3 : B 2 : B 2 : C 1 1 : B 1 : A 2 : C 2 : B 2 : A 3 : A 3 : B 4 : B 2 1 : A 1 : B 2 : A 2 : B 2 : C 3 : A 3 : B 4 : B 3
s e r t i o n S o r t { p u b l i c f u n c t i o n s o r t ( a r r a y $ e l e m e n t s ) { $ i t e r a t i o n s = c o u n t ( $ e l e m e n t s ) ; f o r ( $ i n d e x = 1 ; $ i n d e x < $ i t e r a t i o n s ; $ i n d e x + + ) { $ e l e m e n t T o I n s e r t = $ e l e m e n t s [ $ i n d e x ] ; $ i n s e r t I n d e x = $ i n d e x ; w h i l e ( $ i n s e r t I n d e x > 0 & & $ e l e m e n t T o I n s e r t < $ e l e m e n t s [ $ i n s e r t I n d e x - 1 ] ) { $ e l e m e n t s [ $ i n s e r t I n d e x ] = $ e l e m e n t s [ $ i n s e r t I n d e x - 1 ] ; $ e l e m e n t s [ $ i n s e r t I n d e x - 1 ] = $ e l e m e n t T o I n s e r t ; $ i n s e r t I n d e x - - ; } } r e t u r n $ e l e m e n t s ; } }
b l i c f u n c t i o n s o r t ( a r r a y $ e l e m e n t s ) { / / A t l e a s t o n e i t e r a t i o n p e r e l e m e n t $ i t e r a t i o n s = c o u n t ( $ e l e m e n t s ) ; f o r ( $ i n d e x = 1 ; $ i n d e x < $ i t e r a t i o n s ; $ i n d e x + + ) { / / I f n o o t h e r v a r i a b l e o p e r a t i o n s h a p p e n h e r e : / / a l g o r i t h m i s O ( n ) } }
in order, the w h i l e loop is not entered. f o r ( $ i n d e x = 1 ; $ i n d e x < $ i t e r a t i o n s ; $ i n d e x + + ) { / / " P i c k u p " t h e c u r r e n t e l e m e n t a n d i t s p o s i t i o n $ e l e m e n t T o I n s e r t = $ e l e m e n t s [ $ i n d e x ] ; $ i n s e r t I n d e x = $ i n d e x ; / / I t e r a t e b a c k t h r o u g h t h e e l e m e n t s / / u n t i l t h e c o r r e c t p o s i t i o n i t r e a c h e d w h i l e ( $ i n s e r t I n d e x > 0 & & $ e l e m e n t T o I n s e r t < $ e l e m e n t s [ $ i n s e r t I n d e x - 1 ] ) { / / S w a p o u t o f o r d e r e l e m e n t s $ e l e m e n t s [ $ i n s e r t I n d e x ] = $ e l e m e n t s [ $ i n s e r t I n d e x - 1 ] ; $ e l e m e n t s [ $ i n s e r t I n d e x - 1 ] = $ e l e m e n t T o I n s e r t ; $ i n s e r t I n d e x - - ; } }
b b l e S o r t { p u b l i c f u n c t i o n s o r t ( a r r a y $ e l e m e n t s ) { f o r ( $ i n d e x = c o u n t ( $ e l e m e n t s ) ; $ i n d e x > 0 ; $ i n d e x - - ) { $ s w a p p e d = f a l s e ; f o r ( $ s w a p I n d e x = 0 ; $ s w a p I n d e x < $ i n d e x - 1 ; $ s w a p I n d e x + + ) { i f ( $ e l e m e n t s [ $ s w a p I n d e x ] > $ e l e m e n t s [ $ s w a p I n d e x + 1 ] ) { $ t m p = $ e l e m e n t s [ $ s w a p I n d e x ] ; $ e l e m e n t s [ $ s w a p I n d e x ] = $ e l e m e n t s [ $ s w a p I n d e x + 1 ] ; $ e l e m e n t s [ $ s w a p I n d e x + 1 ] = $ t m p ; $ s w a p p e d = t r u e ; } } i f ( ! $ s w a p p e d ) { r e t u r n $ e l e m e n t s ; } } } }
I t e r a t e t h r o u g h t h e e l e m e n t s f o r ( $ i n d e x = c o u n t ( $ e l e m e n t s ) ; $ i n d e x > 0 ; $ i n d e x - - ) { $ s w a p p e d = f a l s e ; / / S w a p o u t o f o r d e r e l e m e n t s / / u n t i l t h e r e ' s n o t h i n g l e f t t o s w a p i f ( ! $ s w a p p e d ) { r e t u r n $ e l e m e n t s ; } }
then $ s w a p p e d stays f a l s e . f o r ( $ i n d e x = c o u n t ( $ e l e m e n t s ) ; $ i n d e x > 0 ; $ i n d e x - - ) { $ s w a p p e d = f a l s e ; / / I t e r a t e t h r o u g h t h e u n s o r t e d p o r t i o n o f t h e l i s t f o r ( $ s w a p I n d e x = 0 ; $ s w a p I n d e x < $ i n d e x - 1 ; $ s w a p I n d e x + + ) { / / C o m p a r e a n d s w a p e l e m e n t s i f ( $ e l e m e n t s [ $ s w a p I n d e x ] > $ e l e m e n t s [ $ s w a p I n d e x + 1 ] ) { $ t m p = $ e l e m e n t s [ $ s w a p I n d e x ] ; $ e l e m e n t s [ $ s w a p I n d e x ] = $ e l e m e n t s [ $ s w a p I n d e x + 1 ] ; $ e l e m e n t s [ $ s w a p I n d e x + 1 ] = $ t m p ; $ s w a p p e d = t r u e ; } } i f ( ! $ s w a p p e d ) { r e t u r n $ e l e m e n t s ; } }
i c k S o r t { p u b l i c f u n c t i o n s o r t ( a r r a y $ e l e m e n t s ) { $ t h i s - > d o Q u i c k S o r t ( $ e l e m e n t s , 0 , c o u n t ( $ e l e m e n t s ) - 1 ) ; r e t u r n $ e l e m e n t s ; } f u n c t i o n d o Q u i c k S o r t ( $ e l e m e n t s , $ l e f t I n d e x , $ r i g h t I n d e x ) { / / D i v i d e t h e a r r a y i n t w o , c r e a t i n g a “ p i v o t ” v a l u e / / M o v e a n y v a l u e l o w e r t h a n t h e p i v o t t o t h e l e f t a r r a y / / M o v e a n y v a l u e h i g h e r t h a n t h e p i v o t t o t h e r i g h t a r r a y / / R e c u r s i v e l y r e p e a t t h e s a m e o p e r a t i o n o n b o t h a r r a y s } }
c t i o n d o Q u i c k S o r t ( $ e l e m e n t s , $ l e f t I n d e x , $ r i g h t I n d e x ) { / / D i v i d e t h e a r r a y i n t w o , c r e a t i n g a “ p i v o t ” v a l u e $ p i v o t I n d e x = c e i l ( $ l e f t I n d e x + ( ( $ r i g h t I n d e x - $ l e f t I n d e x ) / 2 ) ) ; $ p i v o t E l e m e n t = $ e l e m e n t s [ $ p i v o t I n d e x ] ; $ l e f t S w a p I n d e x = $ l e f t I n d e x ; $ r i g h t S w a p I n d e x = $ r i g h t I n d e x ; w h i l e ( $ l e f t S w a p I n d e x < = $ r i g h t S w a p I n d e x ) { / / M o v e t h e l e f t i n d e x u n t i l w e f i n d a n o u t o f o r d e r e l e m e n t / / M o v e t h e r i g h t i n d e x u n t i l w e f i n d a n o u t o f o r d e r e l e m e n t / / S w a p t h e m } }
e ( $ l e f t S w a p I n d e x < = $ r i g h t S w a p I n d e x ) { / / M o v e t h e l e f t i n d e x u n t i l w e f i n d a n o u t o f o r d e r e l e m e n t w h i l e ( $ e l e m e n t s [ $ l e f t S w a p I n d e x ] < $ p i v o t E l e m e n t ) { $ l e f t S w a p I n d e x + + ; } / / M o v e t h e r i g h t i n d e x u n t i l w e f i n d a n o u t o f o r d e r e l e m e n t w h i l e ( $ e l e m e n t s [ $ r i g h t S w a p I n d e x ] > $ p i v o t E l e m e n t ) { $ r i g h t S w a p I n d e x - - ; } / / S w a p t h e m i f ( $ l e f t S w a p I n d e x < = $ r i g h t S w a p I n d e x ) { $ t m p = $ e l e m e n t s [ $ l e f t S w a p I n d e x ] ; $ e l e m e n t s [ $ l e f t S w a p I n d e x ] = $ e l e m e n t s [ $ r i g h t S w a p I n d e x ] ; $ e l e m e n t s [ $ r i g h t S w a p I n d e x ] = $ t m p ; $ l e f t S w a p I n d e x + + ; $ r i g h t S w a p I n d e x - - ; } }
i o n d o Q u i c k S o r t ( $ e l e m e n t s , $ l e f t I n d e x , $ r i g h t I n d e x ) { / / D i v i d e t h e a r r a y i n t w o , c r e a t i n g a “ p i v o t ” v a l u e / / M o v e a n y v a l u e l o w e r t h a n t h e p i v o t t o t h e l e f t a r r a y / / M o v e a n y v a l u e h i g h e r t h a n t h e p i v o t t o t h e r i g h t a r r a y / / R e c u r s i v e l y r e p e a t t h e s a m e o p e r a t i o n o n b o t h a r r a y s i f ( $ l e f t I n d e x < $ r i g h t S w a p I n d e x ) { $ t h i s - > d o Q u i c k S o r t ( $ e l e m e n t s , $ l e f t I n d e x , $ r i g h t S w a p I n d e x ) ; } i f ( $ l e f t S w a p I n d e x < $ r i g h t I n d e x ) { $ t h i s - > d o Q u i c k S o r t ( $ e l e m e n t s , $ l e f t S w a p I n d e x , $ r i g h t I n d e x ) ; } }
a p S o r t { p u b l i c f u n c t i o n s o r t ( a r r a y $ e l e m e n t s ) { $ s i z e = c o u n t ( $ e l e m e n t s ) ; f o r ( $ i n d e x = f l o o r ( ( $ s i z e / 2 ) ) - 1 ; $ i n d e x > = 0 ; $ i n d e x - - ) { $ e l e m e n t s = $ t h i s - > s i f t D o w n ( $ e l e m e n t s , $ i n d e x , $ s i z e ) ; } f o r ( $ i n d e x = $ s i z e - 1 ; $ i n d e x > = 1 ; $ i n d e x - - ) { $ t m p = $ e l e m e n t s [ 0 ] ; $ e l e m e n t s [ 0 ] = $ e l e m e n t s [ $ i n d e x ] ; $ e l e m e n t s [ $ i n d e x ] = $ t m p ; $ e l e m e n t s = $ t h i s - > s i f t D o w n ( $ e l e m e n t s , 0 , $ i n d e x - 1 ) ; } r e t u r n $ e l e m e n t s ; } }
l i c f u n c t i o n s i f t D o w n ( a r r a y $ e l e m e n t s , $ r o o t , $ b o t t o m ) { $ d o n e = f a l s e ; w h i l e ( ( $ r o o t * 2 < = $ b o t t o m ) & & ( ! $ d o n e ) ) { i f ( $ r o o t * 2 = = $ b o t t o m ) $ m a x C h i l d = $ r o o t * 2 ; e l s e i f ( $ e l e m e n t s [ $ r o o t * 2 ] > $ e l e m e n t s [ $ r o o t * 2 + 1 ] ) $ m a x C h i l d = $ r o o t * 2 ; e l s e $ m a x C h i l d = $ r o o t * 2 + 1 ; i f ( $ e l e m e n t s [ $ r o o t ] < $ e l e m e n t s [ $ m a x C h i l d ] ) { $ t m p = $ e l e m e n t s [ $ r o o t ] ; $ e l e m e n t s [ $ r o o t ] = $ e l e m e n t s [ $ m a x C h i l d ] ; $ e l e m e n t s [ $ m a x C h i l d ] = $ t m p ; $ r o o t = $ m a x C h i l d ; } e l s e $ d o n e = t r u e ; } r e t u r n $ e l e m e n t s ; }
Ο(n log n) Implemented by S p l M i n H e a p ( ) $ h = n e w S p l M i n H e a p ( ) ; f o r e a c h ( $ u n s o r t e d a s $ v a l ) $ h - > i n s e r t ( $ v a l ) ; $ h - > t o p ( ) ; w h i l e ( $ h - > v a l i d ( ) ) { e c h o $ h - > c u r r e n t ( ) . " \ n " ; $ h - > n e x t ( ) ; }
q u e n t i a l S e a r c h { p u b l i c f u n c t i o n s e a r c h ( $ t a r g e t , a r r a y $ e l e m e n t s ) { $ i t e r a t i o n s = c o u n t ( $ e l e m e n t s ) ; f o r ( $ i n d e x = 0 ; $ i n d e x < = $ i t e r a t i o n s ; $ i n d e x + + ) { i f ( $ t a r g e t = = $ e l e m e n t s [ $ i n d e x ] ) { $ t h i s - > n o t i f y O b s e r v e r s ( a r r a y ( $ i n d e x ) ) ; r e t u r n t r u e ; } } r e t u r n f a l s e ; } }
n a r y S e a r c h { p u b l i c f u n c t i o n s e a r c h ( $ t a r g e t , a r r a y $ e l e m e n t s ) { r e t u r n $ t h i s - > d o B i n a r y S e a r c h ( $ t a r g e t , $ e l e m e n t s , 0 , c o u n t ( $ e l e m e n t s ) ) ; } p u b l i c f u n c t i o n d o B i n a r y S e a r c h ( $ t a r g e t , a r r a y $ e l e m e n t s , $ m i n I n d e x , $ m a x I n d e x ) { i f ( $ m a x I n d e x < $ m i n I n d e x ) { r e t u r n f a l s e ; } $ m i d I n d e x = f l o o r ( ( $ m i n I n d e x + $ m a x I n d e x ) / 2 ) ; i f ( $ e l e m e n t s [ $ m i d I n d e x ] > $ t a r g e t ) { r e t u r n $ t h i s - > d o B i n a r y S e a r c h ( $ t a r g e t , $ e l e m e n t s , $ m i n I n d e x , $ m i d I n d e x - 1 ) ; } i f ( $ e l e m e n t s [ $ m i d I n d e x ] < $ t a r g e t ) { r e t u r n $ t h i s - > d o B i n a r y S e a r c h ( $ t a r g e t , $ e l e m e n t s , $ m i d I n d e x + 1 , $ m a x I n d e x ) ; } r e t u r n t r u e ; } }
improved in 1980 (Comb Sort) Quick Sort: developed in 1960 (C. A. R. Hoare) Heap Sort: improved in the '60s (Robert Floyd) Oh, and there's Radix Sort used by Herman Hollerith in 1887