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


    //无聊的冒泡算法
    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>";
    

      

  • 相关阅读:
    #转 并查集详解
    美素数
    Wireless Network
    寒假CF- WA了不要怕!
    寒假CF1 小呀小苹果儿
    (专题赛)A Bug's Life
    (周三赛)The Hardest Problem Ever
    (周三赛)A==B?
    (周三赛)还是畅通工程
    cursor改变鼠标样式
  • 原文地址:https://www.cnblogs.com/xiangxiaodong/p/3434552.html
Copyright © 2020-2023  润新知