>  기사  >  백엔드 개발  >  PHP 常见算法【冒泡排序, 快速排序, 插入排序, 取舍排序, 二分法查找, .】

PHP 常见算法【冒泡排序, 快速排序, 插入排序, 取舍排序, 二分法查找, .】

WBOY
WBOY원래의
2016-06-13 10:38:411011검색

PHP 常见算法【冒泡排序, 快速排序, 插入排序, 选择排序, 二分法查找, ..】

// 冒泡排序function bubblesort($arr) {    for($i=0,$j=count($arr); $i<$j; $i++) {        for($k=$j-1; $k>$i; $k--) {            if ($arr[$k] < $arr[$k-1]) list($arr[$k-1], $arr[$k]) = array($arr[$k], $arr[$k-1]);        }     }    return $arr;}$arr = array(1,4,14,3,56,23,435,2,234,2,33,23,123);print_r(bubblesort($arr));
// 快速排序function quicksort($arr) {    if(($count = count($arr)) <= 1 ) return $arr;    $base = $arr[0];    $left = $right = array();    for($i=1; $i<$count; $i++) {        if($arr[$i] <= $base) $left[] = $arr[$i];        else $right[] = $arr[$i];    }    $left = quicksort($left);    $right = quicksort($right);    return array_merge($left, array($base), $right);}echo join(',', quicksort(array(1,3,23,5,234,65,6)));?
// 插入排序function insertsort($arr) {    for($i=1, $j=count($arr); $i<$j; $i++) {        $k = $i;        while($k > 0 && $arr[$k-1] > $arr[$k]) {            list($arr[$k], $arr[$k-1]) = array($arr[$k-1], $arr[$k]);            $k--;        }    }    return $arr;}$array=array(10,8,7,5,1,2,3,4);print_r(insertsort($array));

?

// 选择排序, (非递归)function selectsort($arr) {    for($i=0, $j=count($arr); $i<=$j; $i++) {        $min = $i;        $temp = $arr[$i];        for($k=$i+1; $k<$j; $k++) {            if($temp > $arr[$k]) {                $min = $k;                $temp = $arr[$k];            }        }         if($min != $i) list($arr[$min], $arr[$i]) = array($arr[$i], $arr[$min]);    }    return $arr;}$arr = array(9,3,11,23,90,99,12,34,22,87,32);print_r(selectsort($arr));

?

// 选择排序(递归实现)function selectsort2($arr, $start = 0) {    if(($count = count($arr)) == $start + 1) return $arr;    $new = array();    $min = $arr[$start];    $min_index = $start;    for($i=$start+1; $i<$count-1; $i++) {        if($arr[$i] < $min) {            $min = $arr[$i];            $min_index = $i;        }    }    if($arr[$start] != $min) list($arr[$start], $arr[$min_index]) = array($arr[$min_index], $arr[$start]);    return selectsort($arr, $start + 1);}$arr = array(9,3,11,23,90,99,12,34,22,87,32);print_r(selectsort($arr));
?

?

?

<?php// 二分法查找function binarysearch($arr, $value, $start = 0, $end = NULL) {    if($end == NULL) $end = count($arr) - 1;    $index = floor(($start+$end)/2);    $base = $arr[$index];    if($value < $base) return binarysearch($arr, $value, $start, $index-1);    else if($value > $base) return binarysearch($arr, $value, $index+1, $end);    else return $index;}$arr = array(1, 3, 5, 6, 7, 8, 10, 12, 14, 16, 18, 20);$value = 8;echo binarysearch($arr, $value);
?

待续...

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.