<?php 
/********** Generating array (because use of range() was to simple :)): *************/ 
 
function  generateSortedArray( $start  =  300000 ,  $elementsNum  =  10000 ,  $dev  =  30 ) { 
	for ( $i  =  1 ;  $i  <=  $elementsNum ;  $i ++ ) { 
		$start  -=  $rand ; 
		$arr [ ]  =  $start ;  
	} 
	return  $arr ; 
} 
 
/********************** Four insert functions: **************************/ 
 
// for loop, and array copying 
function  insert1( & $arr ,  $elem ) { 
		$arr [ ]  =  $elem ; 
		return  true ; 
	} 
	$lastIndex  =  $c  -  1 ; 
	$inserted  =  false ; 
	for ( $i  =  0 ;  $i  <  $c ;  $i ++ ) { 
		if ( ! $inserted  &&  $arr [ $i ]  <=  $elem ) { 
			$tmp [ ]  =  $elem ; 
			$inserted  =  true ; 
		} 
		$tmp [ ]  =  $arr [ $i ] ; 
		if ( $lastIndex  ==  $i  &&  ! $inserted )  $tmp [ ]  =  $elem ; 
	} 
	$arr  =  $tmp ; 
	return  true ; 
} 
 
// new element inserted at the end of array  
// and moved up until correct place 
function  insert2( & $arr ,  $elem ) { 
	for ( $i  =  $c ;  $i  >  0 ;  $i -- ) { 
		if ( $arr [ $i  -  1 ]  >=  $arr [ $i ] )  break ; 
		$tmp  =  $arr [ $i  -  1 ] ; 
		$arr [ $i  -  1 ]  =  $arr [ $i ] ; 
		$arr [ $i ]  =  $tmp ; 
	} 
	return  true ; 
} 
 
// binary search for correct place + array_splice() to insert element 
function  insert3( & $arr ,  $elem ) { 
	$startIndex  =  0 ; 
	$stopIndex  =  count ( $arr )  -  1 ;  	$middle  =  0 ; 
	while ( $startIndex  <  $stopIndex ) { 
		$middle  =  ceil ( ( $stopIndex  +  $startIndex )  /  2 ) ;  		if ( $elem  >  $arr [ $middle ] ) { 
			$stopIndex  =  $middle  -  1 ; 
		} else  if ( $elem  <=  $arr [ $middle ] ) { 
			$startIndex  =  $middle ; 
		} 
	} 
	$offset  =  $elem  >=  $arr [ $startIndex ]  ? $startIndex  :  $startIndex  +  1 ;  
} 
 
// for loop to find correct place + array_splice() to insert 
function  insert4( & $arr ,  $elem ) { 
	$inserted  =  false ; 
	for ( $i  =  0 ;  $i  <  $c ;  $i ++ ) { 
		if ( $elem  >=  $arr [ $i ] ) { 
			$inserted  =  true ; 
			break ; 
		} 
	} 
	if ( ! $inserted )  $arr [ ]  =  $elem ; 
	return  true ; 
} 
 
/*********************** Speed tests: *************************/ 
 
// check if array is sorted descending 
function  checkIfArrayCorrect( $arr ,  $expectedCount  =  null ) { 
	if ( isset ( $expectedCount )  &&  $c  !=  $expectedCount )  return  false ;  	$correct  =  true ; 
	for ( $i  =  0 ;  $i  <  $c  -  1 ;  $i ++ ) { 
		if ( ! isset ( $arr [ $i  +  1 ] )  ||  $arr [ $i ]  <  $arr [ $i  +  1 ] ) {  			$correct  =  false ; 
			break ; 
		} 
	} 
	return  $correct ; 
} 
// claculates microtimetime diff 
function  timeDiff( $startTime ) { 
	return  $diff ; 
} 
// prints formatted execution time info 
function  showTime( $func ,  $time ) { 
	printf ( "Execution time of %s (): %01.7f  s\n " ,  $func ,  $time ) ;  } 
// generated elements num 
$elementsNum  =  10000 ; 
// generate starting point 
$start  =  300000 ; 
// generated elements random range  1 - $dev 
$dev  =  50 ; 
 
 
echo  "Generating array with descending order, $elementsNum  elements, begining from $start \n " ; 
$arr  =  generateSortedArray( $start ,  $elementsNum ,  $dev ) ; 
showTime( 'generateSortedArray' ,  timeDiff( $startTime ) ) ; 
 
$step  =  2 ; 
echo  "Generating second array using range range(), $elementsNum  elements, begining from $start , step $step \n " ; 
$arr2  =  range ( $start ,  $start  -  $elementsNum  *  $step ,  $step ) ; showTime( 'range' ,  timeDiff( $startTime ) ) ; 
 
echo  "Checking if array is correct\n " ; 
$sorted  =  checkIfArrayCorrect( $arr ,  $elementsNum ) ; 
showTime( 'checkIfArrayCorrect' ,  timeDiff( $startTime ) ) ; 
 
if ( ! $sorted )  die ( "Array is not in descending order!\n " ) ; echo  "Array OK\n " ; 
 
 
// number of elements to insert from every range 
$randElementNum  =  20 ; 
 
// some ranges of elements to insert near begining, middle and end of generated array 
// start value => end value 
	300000  =>  280000 , 
	160000  =>  140000 , 
	30000  =>  0 , 
) ; 
foreach ( $ranges  as  $from  =>  $to ) { 
	echo  "Generating $randElementNum  random elements from range [$from  - $to ] to insert\n " ; 
	while ( count ( $values )  <  $randElementNum ) {  	} 
} 
// some elements to insert on begining and end of array 
 
echo  "Generated elements: \n " ; 
for ( $i  =  0 ;  $i  <  count ( $toInsert ) ;  $i ++ ) { 	if ( $i  >  0  &&  $i  %  5  ==  0 )  echo  "\n " ; 
	printf ( "%8d , " ,  $toInsert [ $i ] ) ;  	if ( $i  ==  count ( $toInsert )  -  1 )  echo  "\n " ;  } 
// functions to test 
$toTest  =  array ( 'insert1'  =>  null ,  'insert2'  =>  null ,  'insert3'  =>  null ,  'insert4'  =>  null ) ; foreach ( $toTest  as  $func  =>  & $time ) { 
	echo  "\n \n ================== Testing speed of $func () ======================\n \n " ; 
	$tmpArr  =  $arr ; 
	for ( $i  =  0 ;  $i  <  count ( $toInsert ) ;  $i ++ ) {  		$func ( $tmpArr ,  $toInsert [ $i ] ) ; 
	} 
	$time  =  timeDiff( $startTime ,  'checkIfArraySorted' ) ; 
	showTime( $func ,  $time ) ; 
	echo  "Checking if after using $func () array is still correct: \n " ; 
	if ( ! checkIfArrayCorrect
( $tmpArr ,  count ( $arr )  +  count ( $toInsert ) ) ) {  		echo  "Array INCORRECT!\n \n " ; 
	} else { 
		echo  "Array OK!\n \n " ; 
	} 
	echo  "Few elements from begining of array:\n " ; 
 
	echo  "Few elements from end of array:\n " ; 
 
	//echo "\n================== Finished testing $func() ======================\n\n"; 
} 
echo  "\n \n ================== Functions time summary  ======================\n \n " ; 
PD9waHAKLyoqKioqKioqKiogR2VuZXJhdGluZyBhcnJheSAoYmVjYXVzZSB1c2Ugb2YgcmFuZ2UoKSB3YXMgdG8gc2ltcGxlIDopKTogKioqKioqKioqKioqKi8KCmZ1bmN0aW9uIGdlbmVyYXRlU29ydGVkQXJyYXkoJHN0YXJ0ID0gMzAwMDAwLCAkZWxlbWVudHNOdW0gPSAxMDAwMCwgJGRldiA9IDMwKXsKCSRhcnIgPSBhcnJheSgpOwoJZm9yKCRpID0gMTsgJGkgPD0gJGVsZW1lbnRzTnVtOyAkaSsrKXsKCQkkcmFuZCA9IG10X3JhbmQoMSwgJGRldik7CgkJJHN0YXJ0IC09ICRyYW5kOwoJCSRhcnJbXSA9ICRzdGFydDsgCgl9CglyZXR1cm4gJGFycjsKfQoKLyoqKioqKioqKioqKioqKioqKioqKiogRm91ciBpbnNlcnQgZnVuY3Rpb25zOiAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8vIGZvciBsb29wLCBhbmQgYXJyYXkgY29weWluZwpmdW5jdGlvbiBpbnNlcnQxKCYkYXJyLCAkZWxlbSl7CglpZihlbXB0eSgkYXJyKSl7CgkJJGFycltdID0gJGVsZW07CgkJcmV0dXJuIHRydWU7Cgl9CgkkYyA9IGNvdW50KCRhcnIpOwoJJGxhc3RJbmRleCA9ICRjIC0gMTsKCSR0bXAgPSBhcnJheSgpOwoJJGluc2VydGVkID0gZmFsc2U7Cglmb3IoJGkgPSAwOyAkaSA8ICRjOyAkaSsrKXsKCQlpZighJGluc2VydGVkICYmICRhcnJbJGldIDw9ICRlbGVtKXsKCQkJJHRtcFtdID0gJGVsZW07CgkJCSRpbnNlcnRlZCA9IHRydWU7CgkJfQoJCSR0bXBbXSA9ICRhcnJbJGldOwoJCWlmKCRsYXN0SW5kZXggPT0gJGkgJiYgISRpbnNlcnRlZCkgJHRtcFtdID0gJGVsZW07Cgl9CgkkYXJyID0gJHRtcDsKCXJldHVybiB0cnVlOwp9CgovLyBuZXcgZWxlbWVudCBpbnNlcnRlZCBhdCB0aGUgZW5kIG9mIGFycmF5IAovLyBhbmQgbW92ZWQgdXAgdW50aWwgY29ycmVjdCBwbGFjZQpmdW5jdGlvbiBpbnNlcnQyKCYkYXJyLCAkZWxlbSl7CgkkYyA9IGNvdW50KCRhcnIpOwoJYXJyYXlfcHVzaCgkYXJyLCAkZWxlbSk7Cglmb3IoJGkgPSAkYzsgJGkgPiAwOyAkaS0tKXsKCQlpZigkYXJyWyRpIC0gMV0gPj0gJGFyclskaV0pIGJyZWFrOwoJCSR0bXAgPSAkYXJyWyRpIC0gMV07CgkJJGFyclskaSAtIDFdID0gJGFyclskaV07CgkJJGFyclskaV0gPSAkdG1wOwoJfQoJcmV0dXJuIHRydWU7Cn0KCi8vIGJpbmFyeSBzZWFyY2ggZm9yIGNvcnJlY3QgcGxhY2UgKyBhcnJheV9zcGxpY2UoKSB0byBpbnNlcnQgZWxlbWVudApmdW5jdGlvbiBpbnNlcnQzKCYkYXJyLCAkZWxlbSl7Cgkkc3RhcnRJbmRleCA9IDA7Cgkkc3RvcEluZGV4ID0gY291bnQoJGFycikgLSAxOwoJJG1pZGRsZSA9IDA7Cgl3aGlsZSgkc3RhcnRJbmRleCA8ICRzdG9wSW5kZXgpewoJCSRtaWRkbGUgPSBjZWlsKCgkc3RvcEluZGV4ICsgJHN0YXJ0SW5kZXgpIC8gMik7CgkJaWYoJGVsZW0gPiAkYXJyWyRtaWRkbGVdKXsKCQkJJHN0b3BJbmRleCA9ICRtaWRkbGUgLSAxOwoJCX1lbHNlIGlmKCRlbGVtIDw9ICRhcnJbJG1pZGRsZV0pewoJCQkkc3RhcnRJbmRleCA9ICRtaWRkbGU7CgkJfQoJfQoJJG9mZnNldCA9ICRlbGVtID49ICRhcnJbJHN0YXJ0SW5kZXhdID8gJHN0YXJ0SW5kZXggOiAkc3RhcnRJbmRleCArIDE7IAoJYXJyYXlfc3BsaWNlKCRhcnIsICRvZmZzZXQsIDAsIGFycmF5KCRlbGVtKSk7Cn0KCi8vIGZvciBsb29wIHRvIGZpbmQgY29ycmVjdCBwbGFjZSArIGFycmF5X3NwbGljZSgpIHRvIGluc2VydApmdW5jdGlvbiBpbnNlcnQ0KCYkYXJyLCAkZWxlbSl7CgkkYyA9IGNvdW50KCRhcnIpOwoJJGluc2VydGVkID0gZmFsc2U7Cglmb3IoJGkgPSAwOyAkaSA8ICRjOyAkaSsrKXsKCQlpZigkZWxlbSA+PSAkYXJyWyRpXSl7CgkJCWFycmF5X3NwbGljZSgkYXJyLCAkaSwgMCwgYXJyYXkoJGVsZW0pKTsKCQkJJGluc2VydGVkID0gdHJ1ZTsKCQkJYnJlYWs7CgkJfQoJfQoJaWYoISRpbnNlcnRlZCkgJGFycltdID0gJGVsZW07CglyZXR1cm4gdHJ1ZTsKfQoKLyoqKioqKioqKioqKioqKioqKioqKioqIFNwZWVkIHRlc3RzOiAqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLy8gY2hlY2sgaWYgYXJyYXkgaXMgc29ydGVkIGRlc2NlbmRpbmcKZnVuY3Rpb24gY2hlY2tJZkFycmF5Q29ycmVjdCgkYXJyLCAkZXhwZWN0ZWRDb3VudCA9IG51bGwpewoJJGMgPSBjb3VudCgkYXJyKTsKCWlmKGlzc2V0KCRleHBlY3RlZENvdW50KSAmJiAkYyAhPSAkZXhwZWN0ZWRDb3VudCkgcmV0dXJuIGZhbHNlOwoJJGNvcnJlY3QgPSB0cnVlOwoJZm9yKCRpID0gMDsgJGkgPCAkYyAtIDE7ICRpKyspewoJCWlmKCFpc3NldCgkYXJyWyRpICsgMV0pIHx8ICRhcnJbJGldIDwgJGFyclskaSArIDFdKXsKCQkJJGNvcnJlY3QgPSBmYWxzZTsKCQkJYnJlYWs7CgkJfQoJfQoJcmV0dXJuICRjb3JyZWN0Owp9Ci8vIGNsYWN1bGF0ZXMgbWljcm90aW1ldGltZSBkaWZmCmZ1bmN0aW9uIHRpbWVEaWZmKCRzdGFydFRpbWUpewoJJGRpZmYgPSBtaWNyb3RpbWUodHJ1ZSkgLSAkc3RhcnRUaW1lOwoJcmV0dXJuICRkaWZmOwp9Ci8vIHByaW50cyBmb3JtYXR0ZWQgZXhlY3V0aW9uIHRpbWUgaW5mbwpmdW5jdGlvbiBzaG93VGltZSgkZnVuYywgJHRpbWUpewoJcHJpbnRmKCJFeGVjdXRpb24gdGltZSBvZiAlcygpOiAlMDEuN2Ygc1xuIiwgJGZ1bmMsICR0aW1lKTsKfQovLyBnZW5lcmF0ZWQgZWxlbWVudHMgbnVtCiRlbGVtZW50c051bSA9IDEwMDAwOwovLyBnZW5lcmF0ZSBzdGFydGluZyBwb2ludAokc3RhcnQgPSAzMDAwMDA7Ci8vIGdlbmVyYXRlZCBlbGVtZW50cyByYW5kb20gcmFuZ2UgIDEgLSAkZGV2CiRkZXYgPSA1MDsKCgplY2hvICJHZW5lcmF0aW5nIGFycmF5IHdpdGggZGVzY2VuZGluZyBvcmRlciwgJGVsZW1lbnRzTnVtIGVsZW1lbnRzLCBiZWdpbmluZyBmcm9tICRzdGFydFxuIjsKJHN0YXJ0VGltZSA9IG1pY3JvdGltZSh0cnVlKTsKJGFyciA9IGdlbmVyYXRlU29ydGVkQXJyYXkoJHN0YXJ0LCAkZWxlbWVudHNOdW0sICRkZXYpOwpzaG93VGltZSgnZ2VuZXJhdGVTb3J0ZWRBcnJheScsIHRpbWVEaWZmKCRzdGFydFRpbWUpKTsKCiRzdGVwID0gMjsKZWNobyAiR2VuZXJhdGluZyBzZWNvbmQgYXJyYXkgdXNpbmcgcmFuZ2UgcmFuZ2UoKSwgJGVsZW1lbnRzTnVtIGVsZW1lbnRzLCBiZWdpbmluZyBmcm9tICRzdGFydCwgc3RlcCAkc3RlcFxuIjsKJHN0YXJ0VGltZSA9IG1pY3JvdGltZSh0cnVlKTsKJGFycjIgPSByYW5nZSgkc3RhcnQsICRzdGFydCAtICRlbGVtZW50c051bSAqICRzdGVwLCAkc3RlcCk7CnNob3dUaW1lKCdyYW5nZScsIHRpbWVEaWZmKCRzdGFydFRpbWUpKTsKCmVjaG8gIkNoZWNraW5nIGlmIGFycmF5IGlzIGNvcnJlY3RcbiI7CiRzdGFydFRpbWUgPSBtaWNyb3RpbWUodHJ1ZSk7CiRzb3J0ZWQgPSBjaGVja0lmQXJyYXlDb3JyZWN0KCRhcnIsICRlbGVtZW50c051bSk7CnNob3dUaW1lKCdjaGVja0lmQXJyYXlDb3JyZWN0JywgdGltZURpZmYoJHN0YXJ0VGltZSkpOwoKaWYoISRzb3J0ZWQpIGRpZSgiQXJyYXkgaXMgbm90IGluIGRlc2NlbmRpbmcgb3JkZXIhXG4iKTsKZWNobyAiQXJyYXkgT0tcbiI7CgokdG9JbnNlcnQgPSBhcnJheSgpOwoKLy8gbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGluc2VydCBmcm9tIGV2ZXJ5IHJhbmdlCiRyYW5kRWxlbWVudE51bSA9IDIwOwoKLy8gc29tZSByYW5nZXMgb2YgZWxlbWVudHMgdG8gaW5zZXJ0IG5lYXIgYmVnaW5pbmcsIG1pZGRsZSBhbmQgZW5kIG9mIGdlbmVyYXRlZCBhcnJheQovLyBzdGFydCB2YWx1ZSA9PiBlbmQgdmFsdWUKJHJhbmdlcyA9IGFycmF5KAoJMzAwMDAwID0+IDI4MDAwMCwKCTE2MDAwMCA9PiAxNDAwMDAsCgkzMDAwMCA9PiAwLAopOwpmb3JlYWNoKCRyYW5nZXMgYXMgJGZyb20gPT4gJHRvKXsKCSR2YWx1ZXMgPSBhcnJheSgpOwoJZWNobyAiR2VuZXJhdGluZyAkcmFuZEVsZW1lbnROdW0gcmFuZG9tIGVsZW1lbnRzIGZyb20gcmFuZ2UgWyRmcm9tIC0gJHRvXSB0byBpbnNlcnRcbiI7Cgl3aGlsZShjb3VudCgkdmFsdWVzKSA8ICRyYW5kRWxlbWVudE51bSl7CgkJJHZhbHVlc1ttdF9yYW5kKCRmcm9tLCAkdG8pXSA9IDE7Cgl9CgkkdG9JbnNlcnQgPSBhcnJheV9tZXJnZSgkdG9JbnNlcnQsIGFycmF5X2tleXMoJHZhbHVlcykpOwp9Ci8vIHNvbWUgZWxlbWVudHMgdG8gaW5zZXJ0IG9uIGJlZ2luaW5nIGFuZCBlbmQgb2YgYXJyYXkKYXJyYXlfcHVzaCgkdG9JbnNlcnQsIDMxMDAwMCk7CmFycmF5X3B1c2goJHRvSW5zZXJ0LCAtMTAwMCk7CgplY2hvICJHZW5lcmF0ZWQgZWxlbWVudHM6IFxuIjsKZm9yKCRpID0gMDsgJGkgPCBjb3VudCgkdG9JbnNlcnQpOyAkaSsrKXsKCWlmKCRpID4gMCAmJiAkaSAlIDUgPT0gMCkgZWNobyAiXG4iOwoJcHJpbnRmKCIlOGQsICIsICR0b0luc2VydFskaV0pOwoJaWYoJGkgPT0gY291bnQoJHRvSW5zZXJ0KSAtIDEpIGVjaG8gIlxuIjsKfQovLyBmdW5jdGlvbnMgdG8gdGVzdAokdG9UZXN0ID0gYXJyYXkoJ2luc2VydDEnID0+IG51bGwsICdpbnNlcnQyJyA9PiBudWxsLCAnaW5zZXJ0MycgPT4gbnVsbCwgJ2luc2VydDQnID0+IG51bGwpOwpmb3JlYWNoKCR0b1Rlc3QgYXMgJGZ1bmMgPT4gJiR0aW1lKXsKCWVjaG8gIlxuXG49PT09PT09PT09PT09PT09PT0gVGVzdGluZyBzcGVlZCBvZiAkZnVuYygpID09PT09PT09PT09PT09PT09PT09PT1cblxuIjsKCSR0bXBBcnIgPSAkYXJyOwoJJHN0YXJ0VGltZSA9IG1pY3JvdGltZSh0cnVlKTsKCWZvcigkaSA9IDA7ICRpIDwgY291bnQoJHRvSW5zZXJ0KTsgJGkrKyl7CgkJJGZ1bmMoJHRtcEFyciwgJHRvSW5zZXJ0WyRpXSk7Cgl9CgkkdGltZSA9IHRpbWVEaWZmKCRzdGFydFRpbWUsICdjaGVja0lmQXJyYXlTb3J0ZWQnKTsKCXNob3dUaW1lKCRmdW5jLCAkdGltZSk7CgllY2hvICJDaGVja2luZyBpZiBhZnRlciB1c2luZyAkZnVuYygpIGFycmF5IGlzIHN0aWxsIGNvcnJlY3Q6IFxuIjsKCWlmKCFjaGVja0lmQXJyYXlDb3JyZWN0KCR0bXBBcnIsIGNvdW50KCRhcnIpICsgY291bnQoJHRvSW5zZXJ0KSkpewoJCWVjaG8gIkFycmF5IElOQ09SUkVDVCFcblxuIjsKCX1lbHNlewoJCWVjaG8gIkFycmF5IE9LIVxuXG4iOwoJfQoJZWNobyAiRmV3IGVsZW1lbnRzIGZyb20gYmVnaW5pbmcgb2YgYXJyYXk6XG4iOwoJcHJpbnRfcihhcnJheV9zbGljZSgkdG1wQXJyLCAwLCA1KSk7CgkKCWVjaG8gIkZldyBlbGVtZW50cyBmcm9tIGVuZCBvZiBhcnJheTpcbiI7CglwcmludF9yKGFycmF5X3NsaWNlKCR0bXBBcnIsIC01KSk7CgoJLy9lY2hvICJcbj09PT09PT09PT09PT09PT09PSBGaW5pc2hlZCB0ZXN0aW5nICRmdW5jKCkgPT09PT09PT09PT09PT09PT09PT09PVxuXG4iOwp9CmVjaG8gIlxuXG49PT09PT09PT09PT09PT09PT0gRnVuY3Rpb25zIHRpbWUgc3VtbWFyeSAgPT09PT09PT09PT09PT09PT09PT09PVxuXG4iOwpwcmludF9yKCR0b1Rlc3QpOw==
				
				 
			
				
			
			
				
	
		
		
		
		 
	
		Generating array with descending order, 10000 elements, begining from 300000
Execution time of generateSortedArray(): 0.0086179 s
Generating second array using range range(), 10000 elements, begining from 300000, step 2
Execution time of range(): 0.0028510 s
Checking if array is correct
Execution time of checkIfArrayCorrect(): 0.0055759 s
Array OK
Generating 20 random elements from range [300000 - 280000] to insert
Generating 20 random elements from range [160000 - 140000] to insert
Generating 20 random elements from range [30000 - 0] to insert
Generated elements: 
  290255,   294911,   293677,   286876,   280342, 
  287995,   293735,   292697,   299842,   284768, 
  282965,   287219,   297657,   294414,   297306, 
  281756,   288477,   281002,   285585,   283227, 
  147570,   142458,   155661,   141752,   141173, 
  153437,   155050,   141765,   147127,   156783, 
  150198,   147377,   154378,   159260,   153550, 
  145251,   148831,   140505,   157355,   150214, 
    8833,      676,    23598,     4809,     5777, 
   16089,     5530,    17560,    13849,      622, 
   23912,    29811,    23176,    13363,    25908, 
     318,    17577,    22735,    23453,    19592, 
  310000,    -1000, 
================== Testing speed of insert1() ======================
Execution time of insert1(): 0.6082120 s
Checking if after using insert1() array is still correct: 
Array OK!
Few elements from begining of array:
Array
(
    [0] => 310000
    [1] => 299985
    [2] => 299975
    [3] => 299972
    [4] => 299924
)
Few elements from end of array:
Array
(
    [0] => 4809
    [1] => 676
    [2] => 622
    [3] => 318
    [4] => -1000
)
================== Testing speed of insert2() ======================
Execution time of insert2(): 0.2938130 s
Checking if after using insert2() array is still correct: 
Array OK!
Few elements from begining of array:
Array
(
    [0] => 310000
    [1] => 299985
    [2] => 299975
    [3] => 299972
    [4] => 299924
)
Few elements from end of array:
Array
(
    [0] => 4809
    [1] => 676
    [2] => 622
    [3] => 318
    [4] => -1000
)
================== Testing speed of insert3() ======================
Execution time of insert3(): 0.1914899 s
Checking if after using insert3() array is still correct: 
Array OK!
Few elements from begining of array:
Array
(
    [0] => 310000
    [1] => 299985
    [2] => 299975
    [3] => 299972
    [4] => 299924
)
Few elements from end of array:
Array
(
    [0] => 4809
    [1] => 676
    [2] => 622
    [3] => 318
    [4] => -1000
)
================== Testing speed of insert4() ======================
Execution time of insert4(): 0.2639391 s
Checking if after using insert4() array is still correct: 
Array OK!
Few elements from begining of array:
Array
(
    [0] => 310000
    [1] => 299985
    [2] => 299975
    [3] => 299972
    [4] => 299924
)
Few elements from end of array:
Array
(
    [0] => 4809
    [1] => 676
    [2] => 622
    [3] => 318
    [4] => -1000
)
================== Functions time summary  ======================
Array
(
    [insert1] => 0.608211994171
    [insert2] => 0.293812990189
    [insert3] => 0.191489934921
    [insert4] => 0.263939142227
)