对冒泡和二分法,特别是二分法有了更深的理解

//无聊的冒泡算法
function mySort($list, $type = "sort") {
    if (is_array($list)) {
        if (count($list) >= 1) {
            for ($i = 0; $i < count($list); $i++) {
                for ($j = 0; $j < count($list) - 1; $j++) {
                    if ($type == "sort") {
                        if ($list[$j] > $list[$j + 1]) {
                            $tmp = $list[$j + 1];
                            $list[$j + 1] = $list[$j];
                            $list[$j] = $tmp;
                        }
                    } else if ($type == "asort") {
                        if ($list[$j] < $list[$j + 1]) {
                            $tmp = $list[$j + 1];
                            $list[$j + 1] = $list[$j];
                            $list[$j] = $tmp;
                        }
                    }
                }
            }
        }
    }
    return $list;
}
//$arr = array(8,4,3,6,1,0,2,22,45);
//print_r(mySort($arr));
//echo "<BR><BR>";
//print_r(mySort($arr,"asort"));
//快速排序的实现原理
function quickSort(array $list)
{
//     static $i=0;
//     $i++;
//     echo "<BR>quickSort{$i}<BR>";
//     var_dump($list);
//     echo "<BR><BR>";
     
     //还是有点不理解,现在从第一次开始进行前移
     //第一次传入的是这个数组
     //array(1,4,22,5,7,6,9)
     //$key值应该是1
     //$left = array();
     //$right = array(4,22,5,7,6,9);
              //开始递归$left()数组
              //这个是空数组递归也白递归了
              //开始递归$right()数组
                    //传入的数组为array(4,22,5,7,6,9);
                    //$key值为4
                    //$left = array();
                    //$right = array(22,5,6,9);
                    //开始递归$left数组
                    //$left数组为空,没有什么好递归的
                    //开始递归$rigth数组
                                //传入的数组为array(22,5,6,9);
                                //$key = 22;
                                //$left = array(5,6,9);
                                //$right = array();
                                //开始$left 
                                       //传入的数组为 array(5,6,9)
                                       //$key = 5;
                                       //$left = array();
                                       //$right = array(6,9);
                                       //开始$right
                                            //传入数组为 array(6,9);
                                            //$key = 6
                                            //$left = array();
                                            //$right = array(9);
                                            //开始$right
                                                   //长度为1直接返回9
                                                   //return 9;
                                            //需要将$left, $key, $right的值返回
                                            //return array(6,9)
                                      //return array(5,6,9)
                              //return array($left, $key, $right) array(5,6,9,22)
                   //retyrn array(4,5,6,9,22)
     $len = count($list);
     if($len <=1){
         return $list;
     }
     $key = $list[0];
     $left = array();
     $right = array();
     for($i=1; $i<$len; $i++){ //注意这里是从第一个元素开始,已经把取出来的$key值没有计算了
         if($list[$i] < $key){
             $left[] = $list[$i];
         }else{
             $right[] = $list[$i];
         }
     }
     $left = quickSort($left);
     $right = quickSort($right);
     return array_merge($left, array($key),$right);
}
//print '<pre>';
//quickSort(array(1,4,22,5,7,6,9));
////print_r(quickSort(array(1,4,22,5,7,6,9)));
//print '</pre>';
function myQuickSort(array $list)
{
     $len = count($list);
     if($len <=1){
         return $list;
     }
     $key = $list[0];
     $left = array();
     $right = array();
     for($i=1; $i<$len; $i++){
          if($list[$i] < $key){
              $left[] = $list[$i];
          }else{
              $right[] = $list[$i];
          } 
     }
     $left = myQuickSort($left);
     $right = myQuickSort($right);
     //合并三个数组值,$left,$key, $right
     //return array_merge($left, array($key), $right);
     return array_merge($right, array($key), $left); 
}
$list = array(55,23,14,99,84,11,66);
echo "<per>";
print_r(myQuickSort($list));
echo "<per>";

  

原文地址:https://www.cnblogs.com/xiangxiaodong/p/3434552.html