国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Laravel學(xué)習(xí)筆記之冒泡、快速、選擇和插入排序(持續(xù)更新)

xingpingz / 2544人閱讀

摘要:說明本文是對(duì)個(gè)人學(xué)習(xí)冒泡快速選擇和插入排序的小總結(jié)。不管咋樣,個(gè)人學(xué)習(xí)時(shí)有關(guān)索引就用到快速排序,索引也是以數(shù)據(jù)結(jié)構(gòu)保存的存儲(chǔ)引擎,所以基本功還是很重要的嘛。

說明:本文是對(duì)個(gè)人學(xué)習(xí)冒泡、快速、選擇和插入排序的小總結(jié)。面試經(jīng)常問這些東西,雖然不知道為啥老愛問這些,該問的又不問。不管咋樣,個(gè)人學(xué)習(xí)MySQL時(shí)有關(guān)索引就用到快速排序,索引也是以B+Tree數(shù)據(jù)結(jié)構(gòu)保存的(Innodb存儲(chǔ)引擎),所以基本功還是很重要的嘛。

快速排序

個(gè)人實(shí)驗(yàn)發(fā)現(xiàn),快速排序在這四個(gè)排序當(dāng)中似乎是最快的,看下圖比較直觀:

看下代碼吧:

arrayQuickSort($left);
        $right = $this->arrayQuickSort($right);

        return array_merge($left, [$mid], $right);
    }

}

$arr       = [5, 4, 5, 3, 8, 10, 3, 2, 4, 7];
$arr2      = array_rand(range(1, 1000), 500);
shuffle($arr2);

$quickSort = new QuickSort();

$time1     = microtime(true);
//$quickArr  = $quickSort->arrayQuickSort($arr);
$quickArr  = $quickSort->arrayQuickSort($arr2);//11.8780136108ms
$time2     = microtime(true);

//var_dump($quickArr);
echo (($time2 - $time1)*1000)."ms".PHP_EOL;

實(shí)驗(yàn)快速排序,排序隨機(jī)的500個(gè)數(shù)只要11ms左右,還挺快。

冒泡排序

冒泡排序效率就比較差了,看圖比較直觀它的原理:

看代碼吧:

 $data[$j+1]){
                    $this->swap($data[$j], $data[$j+1]);
                }
            }
        }

        return $data;
    }

    /**
     * 字符串排序也和數(shù)組一樣,字符串?dāng)?shù)組形式訪問字符
     * @param string|string $str
     * @return string
     */
    public function stringBubbleSort(string $str)
    {
        $count = strlen($str);
        for($i=0; $i<$count; $i++){
            for($j=0; $j<$count-1-$i; $j++){
                if($str[$j] > $str[$j+1]){
                    $this->swap($str[$j], $str[$j+1]);
                }
            }
        }

        return $str;
    }

    /**
     * 交換變量值
     * @param $var1
     * @param $var2
     */
    public function swap(&$var1, &$var2)
    {
        $tmp  = $var1;
        $var1 = $var2;
        $var2 = $tmp;
    }
}

$arr   = [5, 4, 5, 3, 8, 10, 3, 2, 4, 7];
$str   = "SegmentFault";
$arr2  = array_rand(range(1, 1000), 500);
shuffle($arr2);

$sort  = new BubbleSort();

$time1 = microtime(true);
//$bubbleArr = $sort->arrayBubbleSort($arr);
$bubbleArr = $sort->arrayBubbleSort($arr2);//316.018104553ms
$time2 = microtime(true);

//var_dump($bubbleArr);
echo (($time2 - $time1)*1000)."ms".PHP_EOL;

實(shí)驗(yàn)冒泡排序,排序隨機(jī)的500個(gè)數(shù)需要316ms左右,慢的不行。

插入排序

插入排序個(gè)人覺得就像是玩撲克,牌桌上n張牌,一張張抓過來,然后新牌根據(jù)手上的m張牌依次比較,找到對(duì)應(yīng)位置。看圖比較直觀:

看代碼吧:

0; $j--){
                if($data[$j] > $data[$j-1]){
                    break;
                }
                $this->swap($data[$j-1], $data[$j]);
            }
        }

        return $data;
    }

    /**
     * 交換變量值
     * @param $var1
     * @param $var2
     */
    public function swap(&$var1, &$var2)
    {
        $tmp  = $var1;
        $var1 = $var2;
        $var2 = $tmp;
    }

}

$arr       = [5, 4, 5, 3, 8, 10, 3, 2, 4, 7];
$arr2      = array_rand(range(1, 1000), 500);
shuffle($arr2);
$insert    = new InsertSort();

$time1     = microtime(true);
//$insertArr = $insert->arrayInsertSort($arr);
$insertArr = $insert->arrayInsertSort($arr2);//315.321922302ms
$time2     = microtime(true);

//var_dump($insertArr);
echo (($time2 - $time1)*1000)."ms".PHP_EOL;



include __DIR__ . "/autoload.php";

function inverst_sort(string $str): string {
    for ($i = 1; $i < strlen($str); $i++) {
        $key = $str[$i];
        $j   = $i - 1;
        
        while ($j > 0 && $str[$j] > $key) {
            $str[$j+1] = $str[$j];
            $j         = $j -1;
        }
        
        $str[$j+1] = $key;
    }
    
    return $str;
}

dump(inverst_sort("abdghhjc"));

實(shí)驗(yàn)插入排序,排序隨機(jī)的500個(gè)數(shù)需要315ms左右,和冒泡排序差不多速度。

選擇排序

選擇排序速度還行,看圖:

看代碼吧:

 $data[$j]){
                    $min = $j;
                }
            }
            
            if($min != $i){
                $this->swap($data[$min], $data[$i]);
            }
        }

        return $data;
    }

    /**
     * 交換變量值
     * @param $var1
     * @param $var2
     */
    public function swap(&$var1, &$var2)
    {
        $tmp  = $var1;
        $var1 = $var2;
        $var2 = $tmp;
    }

}

$arr2      = array_rand(range(1, 1000), 500);
shuffle($arr2);
$arr       = [5, 4, 5, 3, 8, 10, 3, 2, 4, 7];

$select    = new SelectSort();

$time1     = microtime(true);
//$selectArr = $select->arraySelectSort($arr);
$selectArr = $select->arraySelectSort($arr2);//44.0230369568ms
$time2 = microtime(true);

//var_dump($selectArr);
echo (($time2 - $time1)*1000)."ms".PHP_EOL;

實(shí)驗(yàn)選擇排序,排序隨機(jī)的500個(gè)數(shù)需要44ms左右,速度還行。

總結(jié):排序和查找是永恒主題。扎實(shí)下基本功,會(huì)繼續(xù)學(xué)習(xí)相關(guān)排序和查找算法,到時(shí)見。

歡迎關(guān)注Laravel-China。

RightCapital招聘Laravel DevOps

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/21701.html

相關(guān)文章

  • 如何"有計(jì)劃,高效率,優(yōu)簡(jiǎn)歷"應(yīng)對(duì)面試

    摘要:雖然有了十全的計(jì)劃,但如何高效率去記住上面那么多東西是一個(gè)大問題,看看我是怎么做的。 前言 前一篇文章講述了我在三月份毫無準(zhǔn)備就去面試的后果,一開始心態(tài)真的爆炸,但是又不服氣,一想到每次回來后家人朋友問我面試結(jié)果的期待臉,越覺得必須付出的行動(dòng)來證明自己了。 面經(jīng)傳送門:一個(gè)1年工作經(jīng)驗(yàn)的PHP程序員是如何被面試官虐的? 下面是我花費(fèi)兩個(gè)星期做的準(zhǔn)備,主要分三部分: 有計(jì)劃——計(jì)劃好...

    gyl_coder 評(píng)論0 收藏0
  • 前端需要知道的數(shù)據(jù)結(jié)構(gòu)與算法(持續(xù)更新中...)

    摘要:通常需要在實(shí)際的計(jì)算機(jī)運(yùn)行才知道具體的執(zhí)行時(shí)間。算法的執(zhí)行時(shí)間往往和算法代碼中語句執(zhí)行的數(shù)量有關(guān)。空間復(fù)雜度運(yùn)行一段程序的內(nèi)存占用,空間復(fù)雜度通常指的是算法程序在計(jì)算機(jī)只想中只想所需要的存儲(chǔ)空間。 基本數(shù)據(jù)結(jié)構(gòu) JS 數(shù)據(jù)類型 基本類型(棧 stack): Number String Boolean Null Undefined 和 Symbol(es6 新增)引用類型(堆 heap)...

    Jensen 評(píng)論0 收藏0
  • JavaScript學(xué)習(xí)筆記 - 基礎(chǔ)排序算法

    摘要:本文記錄了我在學(xué)習(xí)前端上的筆記,方便以后的復(fù)習(xí)和鞏固。冒泡排序算法步驟比較相鄰的元素。這步做完后,最后的元素會(huì)是最大的數(shù)。重復(fù)第二步,直到所有元素均排序完畢。得到序列第二趟,,和進(jìn)行交換。 本文記錄了我在學(xué)習(xí)前端上的筆記,方便以后的復(fù)習(xí)和鞏固。推薦大家去看看這一本gitBook上的書十大經(jīng)典排序算法本文就是看這本書記錄的筆記。 冒泡排序 1.算法步驟 1.比較相鄰的元素。如果第一個(gè)比第...

    mindwind 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<