php实现的冒泡,插入排序,希尔排序,归并排序

<?php
/**
*选择排序也就是冒泡排序,就是基于各个数据之间的对比来排序
*
*/
$arr = array(2,1,7,5,8,9,3,4,10,30,28,24);
function bubbleSort($arr) {
    $len = count($arr);
    $k = 0;
    for($i=0;$i<$len;$i++){
    $k++;
        for($j=$i+1;$j<$len;$j++) {
            if($arr[$i] > $arr[$j]) {
                $k++;
                $tmp = $arr[$i];
                $arr[$i] = $arr[$j];
                $arr[$j] = $tmp;
            }
        }
    }
    echo $k;
    return $arr;
}

print_r(bubbleSort($arr));

/**
*插入排序
*  插入排序可以避免需要排序的数据中有一部分是已经有序的树据在排序
*  判断当前位置i后边的数据是否已经有序.
*/

function insertSort($arr) {
    $len = count($arr);
    $k = 0;
    for($i=1;$i<$len;$i++) {
        $k++;
        //排序 $arr[i],$arr[$i-1],....,$arr[i-n]
        for($j=$i;$j > 0 && ($arr[$j-1] > $arr[$j]);$j--) {
            $tmp = $arr[$j-1];
            $arr[$j-1] = $arr[$j];
            $arr[$j]  = $tmp;
            $k++;
        }
    }
    echo $k;
    return $arr;
}

print_r(insertSort($arr));

/***
*希尔排序
* 希尔排序是对插入排序的优化,希尔排序对于大的乱序数据具有很好的处理能力
*
*/

function heerSort($arr) {
    $len = count($arr);
    $tmp = '';
    $h = (int)$len/2;
    $k = 0;
    while($h >=1) {
    $k++;
        for($i=$h;$i<$len;$i++) {
                $k++;//排序 $arr[i],$arr[$i-h],....,$arr[i-n*h]
            for($j=$i;$j >= $h && ($arr[$j-$h] > $arr[$j]);$j--) {
                $tmp = $arr[$j-$h];
                $arr[$j-$h] = $arr[$j];
                $arr[$j]  = $tmp;
                $k++;
            }
        }
        $h = (int)$h/2;
    }
    echo $k;
 return $arr;
}
print_r(heerSort($arr));

/**
*快速排序
*
*/
function quickSort($arr,$left,$right) {
    if($left === $right) return false;
    $tmp = '';
    $i=$j=0;
    $center = (int)(($left + $right)/2);
    quickSort($arr,$left,$center);
    quickSort($arr,$center+1,$right);
    for($i = $left; $i< $right;$i++) {
        //$arr[$i-1],$arr[$i-2]...$arr[$i-n]相互之间比较
        for($j=$i;$j > 0 && ($arr[$j-1] > $arr[$j]);$j--) {
                $tmp       = $arr[$j];
                $arr[$j]   = $arr[$j-1];
                $arr[$j-1] = $tmp;
            
        }
    }
    return $arr;
}
$len = count($arr);
print_r(quickSort($arr,0,$len));

posted on 2015-03-19 23:05  木子牛  阅读(184)  评论(0)    收藏  举报

导航