<?php
class GeoCoder {
protected $latitude;
protected $longitude;
public $distance;
public function __construct($lat,$long,$dist) {
$this->latitude = $lat;
$this->longitude = $long;
$this->distance = $dist;
}
}
$o1 = new GeoCoder(-22.43,-46.81,1500.00);
$o2 = new GeoCoder(-22.42,-46.82,1740.00);
$o3 = new GeoCoder(-21.43,-46.80,152.00);
$array = array($o1, $o2, $o3);
function quickSort( &$array )
{
$cur = 1;
$stack[1]['l'] = 0;
$stack[1]['r'] = count($array)-1;
do
{
$l = $stack[$cur]['l'];
$r = $stack[$cur]['r'];
$cur--;
do
{
$i = $l;
$j = $r;
$tmp = $array[(int)( ($l+$r)/2 )];
// partion the array in two parts.
// left from $tmp are with smaller values,
// right from $tmp are with bigger ones
do
{
while( $array[$i]->distance < $tmp->distance )
$i++;
while( $tmp->distance < $array[$j]->distance )
$j--;
// swap elements from the two sides
if( $i <= $j)
{
$w = $array[$i];
$array[$i] = $array[$j];
$array[$j] = $w;
$i++;
$j--;
}
}while( $i <= $j );
if( $i < $r )
{
$cur++;
$stack[$cur]['l'] = $i;
$stack[$cur]['r'] = $r;
}
$r = $j;
}while( $l < $r );
}while( $cur != 0 );
}
var_dump(quickSort($array));
preferences:
39.03 ms | 402 KiB | 5 Q