排序方式和查找
<?php
// 冒泡排序-----越比越少
// 拿出数组中相邻的两个元素进行对比,如果下标大的值比下标小的值小,把位置调换
$arr = array(5,3,8,4,9,1,6,0,7,2);
print_r(bubble_sort($arr));
function bubble_sort($array)
{
$count = count($array);
// print_r($count);
if ($count <= 0) {
return false;
}
for ($i=0; $i <$count ; $i++) {
for ($j=$count-1; $j >$i ; $j--) {
if ($array[$j] < $array[$j-1]) {
$x = $array[$j];
$array[$j] = $array[$j-1];
$array[$j-1] = $x;
}
}
}
return $array;
}
// ...........................................................................
// 冒泡排序
$arr = array(5,3,8,4,9,1,6,0,7,2);
$count = count($arr);
// print_r($count);
if ($count <= 0) {
return false;
}
for ($i=0; $i <$count ; $i++) {
for ($j=$count-1; $j >$i ; $j--) {
if ($arr[$j] < $arr[$j-1]) {
$x = $arr[$j];
$arr[$j] = $arr[$j-1];
$arr[$j-1] = $x;
}
}
}
print_r($arr);
// ....................................................................................
// 快速排序
function kuaisu($arr){
$len = count($arr);
if($len <= 1){
return $arr;
}
$key = $arr[0];
$left_arr = array();
$right_arr = array();
for($i=1; $i<$len;$i++){
if($arr[$i] <= $key){
$left_arr[] = $arr[$i];
}else{
$right_arr[] = $arr[$i];
}
}
$left_arr = kuaisu($left_arr);
$right_arr = kuaisu($right_arr);
return array_merge($left_arr, array($key), $right_arr);
}
$arr = array(23,98,54,2,9,62,34);
print_r(kuaisu($arr));
// .............................................................................
// 快速排序
// 取出下表为0的一个元素定义为$key,用这个元素和其他元素进行比较,被比的元素比$key小,就放到左边的数组,否则就放到右边的数组,把三个数组进行合并
// $arr = array(23,98,54,2,9,62,34);
$len = count($arr);
if($len <= 1){
return $arr;
}
$key = $arr[0];
$left_arr = array();
$right_arr = array();
for($i=1; $i<$len;$i++){
if($arr[$i] < $key){
$left_arr[] = $arr[$i];
}else{
$right_arr[] = $arr[$i];
}
}
// $left_arr = kuaisu($left_arr);
// $right_arr = kuaisu($right_arr);
$b = array_merge($left_arr, array($key), $right_arr);
print_r($b);die;
// .........................................................................
// 插入排序---直接插入------越比越多
先定义一个值,那这个值和其他的进行比较,如果定义的值是最小的,则不变,反之,
function insertSort($arr) {
$len=count($arr);
for ($i=1; $i < $len; $i++) {
//获得当前需要比较的元素值。
$tmp = $arr[$i];
//内层循环控制 比较 并 插入
for ($j = $i - 1; $j >= 0; $j--) {
//$arr[$i];//需要插入的元素; $arr[$j];//需要比较的元素
if ($tmp < $arr[$j]) {
//发现插入的元素要小,交换位置
//将后边的元素与前面的元素互换
$arr[$j + 1] = $arr[$j];
//将前面的数设置为 当前需要交换的数
$arr[$j] = $tmp;
} else {
//如果碰到不需要移动的元素
//由于是已经排序好是数组,则前面的就不需要再次比较了。
break;
}
}
}
//将这个元素 插入到已经排序好的序列内。
//返回
return $arr;
}
$arr = array(88, 1, 2, 5, 4, 3, 66, 0);
$res = insertSort($arr);
print_r($res);
// ........................................................................
// 折半查找
// 定义一个要查找的值、最大值的下标和最小值的下标,获得平均下标,拿平均下标的值和要找的值进行比对,如果要找的值小,则对左边的一部分进行再次查找,最大值变成平均值-1,反之,
$arr = array(1,5,6,7,8,9);
function zheban($arr,$num)
{
$low = 0;
$top = sizeof($arr)-1;
while ($low <= $top) {
$zhong = floor(($low+$top)/2);
if ($arr[$zhong] == $num) {
return $zhong;
}elseif ($arr[$zhong] < $num) {
$low = $zhong+1;
}else{
$top = $zhong-1;
}
}
return "1";
}
print_r(zheban($arr,8));
// .................................................................
/*
*堆、栈、队列
*/
// $arr = array(1,5,6,7,8,9);
// //先进先出
// // $b = array_shift($arr);
// // print_r($b);
// // print_r($arr);
// //插入一条数据在后面
// array_push($arr, 10);
// // print_r($arr);
// //后进先出
// array_pop($arr);
// print_r($arr);
//................................................................................
// 1 1 1 1 1 1 1 1
// 128 64 32 16 8 4 2 1
// 01101011
// //转十进制
// 1+2+0+8+0+32+64+0=107
// 302
// //十进制转二进制
// 100101110
// 1+2+4+16+128
?>

浙公网安备 33010602011771号