数组中的排序
function bubbleSort(&$arr) { //取地址而不是复制产生新的内存
$temp = 0; //临时变量,做交换使用
//外层循环 循环数组元素的n-1个
for ($i = 0; $i < count($arr) - 1; $i++) {
//内层循环 当外层循环开始时 内层循环在外层内起作用,所以次数不会减去外层循环
for ($j = 0; $j < count($arr) - 1 - $i; $j++) {
//从小到大排列:当前面那个数小于后面那个数时 交换
if ($arr[$j] > $arr[$j + 1]) {
$temp = $arr[$j];
//先把前面那个大的数保存起来
$arr[$j] = $arr[$j + 1];
//再把后面的哪个数复制给前面那个数
$arr[$j + 1] = $temp;
//然后把保存的那个大的数赋值给后面那个数
}
}
}
}
$rr=array(34,65,221,-23,0,36,-100);
bubbleSort($rr);
print_r($rr);
//选择排序法
function selectSort(&$arr){
$temp=0;
for ($i=0; $i < count($arr)-1; $i++) {
//假设$i是最小的值
$minVal=$arr[$i];
$minIndex=$i; //记下最小值的下标
for($j=$i+1;$j<count($arr),..,;$j++){
if($minVal>$arr[$j]){ //假设不成立
$minVal=$arr[$j];
$minIndex=$j;
}
}
//最后交换
$temp=$arr[$i];
$arr[$i]=$arr[$minIndex];
$arr[$minIndex]=$temp;
}
}
//插入排序法:将待插入的数看成一个整体,依次和前面的数比较,知道找到合适位置
function insertSort(&$arr) {
//假设第一个数是有序的,从第二个数开始
for ($i = 1; $i < count($arr); $i++) {
$insertVal = $arr[$i];
//待插入的数$insertVal
$insertIndex = $i - 1;
//待插入的位置是待插入数的前一位
//当待插入位置不是第一个,并且待插入的值小于他前面待插入位置对应的值
while ($insertIndex >= 0 && $insertVal < $arr[$insertIndex]) {
//将待插入位置对应的值向后移
$arr[$insertIndex+1] = $arr[$insertIndex];
//待插入位置相应的应该向前移以为和更前一位比较,一次循环找到合适位置插入
$insertIndex--;
}
//插入
$arr[$insertIndex+1] = $insertVal;
}
}
insertSort($rr);
//快速排序法:以中间那个数为标准,比他小的排到左边,大的排到右边,然后以此细化
$rr = array(-55, -10,1);
function quickSort($left, $right, &$arr) {
$l = $left;
$r = $right;
$pivot = $arr[($l + $r) / 2];
/*$pivot = ($l + $r) / 2;*/
print_r($pivot);
$temp = 0;
while ($l <$r) {
while ($arr[$l] < $pivot) {
$l++; //1
}
while ($arr[$r] > $pivot) {
$r--;
}
if ($l >= $r) {
break;
}
/*print_r($arr[$l]);
print_r($arr[$r]);*/
$temp = $arr[$l];
$arr[$l] = $arr[$r];
$arr[$r] = $temp;
if ($arr[$l] == $pivot) {
--$r; //0
}
if ($arr[$r] == $pivot) {
++$l; //1
}
}
if ($l == $r) {
$l++; //2
$r--; //0
}
if ($left < $r) {
quickSort($left, $r, $arr);
}
if ($right > $l) {
quickSort($l, $right, $arr);
}
}
quickSort(0,count($rr)-1,$rr);
print_r($rr);

浙公网安备 33010602011771号