PHP实现冒泡排序和快速排序

声明

php中,数组是当一个普通变量,值传递是要一个实参的一个拷贝副本,跟实参无关,引用传递后可以改变实参的值。而类的对象是无论值传递和引用传递都是引用传递,是对对象的引用,都会改变实参的值。
PHP中的数组可以按值传递,也可以按引用传递,所以编程时一定要注意。
下面的程序是由Java转换过来的,结构上没有什么变化。直接上代码:

按值传递:

冒泡排序:

$array = array(5,2,8,1,6,9,12,3,15,20);
print_r($array);
echo "
"
; $temp; // $len = count($array); // for ($i = 0; $i < $len;$i++){ // for ($j = $i+1; $j < $len;$j++){ // if ($array[$i] > $array[$j]){ // $temp = $array[$i]; // $array[$i] = $array[$j]; // $array[$j] = $temp; // } // } // } // //print_r($array); function bubbleSort($array){ $len = count($array); for ($i = 0; $i < $len;$i++){ for ($j = $i+1; $j < $len;$j++){ if ($array[$i] > $array[$j]){ $temp = $array[$i]; $array[$i] = $array[$j]; $array[$j] = $temp; } } } return $array; } $array = bubbleSort($array); print_r($array);

快速排序:



$arr = array(5,2,8,1,6,9,12,3,15,20);
print_r($arr);
echo "
"
; function quickSort($array,$left,$right){ $i = $left; $j = $right; $middle = $array[($i+$j)/2]; do{ while($array[$i]<$middle && $i<$right){ $i++; } while($array[$j]>$middle && $j>$left){ $j--; } if ($i <= $j){ $temp = $array[$i]; $array[$i] = $array[$j]; $array[$j] = $temp; $i++; $j--; } }while($i <= $j); if ($i < $right){ $array = quickSort($array,$i,$right); } if ($j > $left){ $array = quickSort($array,$left,$j); } return $array; } $arr = quickSort($arr,0,(count($arr)-1)); print_r($arr);

按引用传递:

冒泡排序:

$array = array(5,2,8,1,6,9,12,3,15,20);
print_r($array);
echo "
"
; $temp; // $len = count($array); // for ($i = 0; $i < $len;$i++){ // for ($j = $i+1; $j < $len;$j++){ // if ($array[$i] > $array[$j]){ // $temp = $array[$i]; // $array[$i] = $array[$j]; // $array[$j] = $temp; // } // } // } // //print_r($array); function bubbleSort(&$array){ $len = count($array); for ($i = 0; $i < $len;$i++){ for ($j = $i+1; $j < $len;$j++){ if ($array[$i] > $array[$j]){ $temp = $array[$i]; $array[$i] = $array[$j]; $array[$j] = $temp; } } } } bubbleSort($array); print_r($array);

快速排序:



$arr = array(5,2,8,1,6,9,12,3,15,20);
print_r($arr);
echo "
"
; function quickSort(&$arr,$left,$right){ $i = $left; $j = $right; $middle = $arr[($i+$j)/2]; do{ while($arr[$i]<$middle && $i<$right){ $i++; } while($arr[$j]>$middle && $j>$left){ $j--; } if ($i <= $j){ $temp = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $temp; $i++; $j--; } }while($i <= $j); if ($i < $right){ quickSort($arr,$i,$right); } if ($j > $left){ quickSort($arr,$left,$j); } } quickSort($arr,0,(count($arr)-1)); print_r($arr);

你可能感兴趣的:(PHP)