麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 邏輯算法 > 正文

算法 PHP實現(xiàn)經(jīng)典算法(上)

2020-03-22 17:38:59
字體:
供稿:網(wǎng)友
  • 前言

    下面的是通過PHP實現(xiàn)經(jīng)典算法,并計算了耗時,可以通過耗時對比這幾種算法的復(fù)雜度。

    插入排序 冒泡排序 選擇排序 并歸排序 快速排序

    CODE
    $arr = [];for ($i = 0; $i < 5000; $i++) {    $arr[] = rand(1, 10000);}//1 插入排序function insertionSort($arr){    for ($i = 1; $i < count($arr); $i++) {        $tmp = $arr[$i]; //設(shè)置監(jiān)視哨        $key = $i - 1; //設(shè)置開始查找的位置        while ($key >= 0 && $tmp < $arr[$key]) { // 監(jiān)視哨的值比查找的值小 并且 沒有到此次查詢的第一個            $arr[$key + 1] = $arr[$key];  //數(shù)組的值進行后移            $key--;  //要查找的位置后移        }        if (($key + 1) != $i) //放置監(jiān)視哨            $arr[$key + 1] = $tmp;    }    return $arr;}$insertion_start_time = microtime(true);$insertion_sort = insertionSort($arr);$insertion_end_time = microtime(true);$insertion_need_time = $insertion_end_time - $insertion_start_time;print_r('插入排序耗時:' . $insertion_need_time . '<br />');//2 冒泡排序function bubbleSort($arr){    for ($i = 0; $i < count($arr); $i++) {        for ($j = 0; $j < $i + 1; $j++) {            if ($arr[$j] < $arr[$j - 1]) {                $temp = $arr[$j - 1];                $arr[$j - 1] = $arr[$j];                $arr[$j] = $temp;            }        }    }    return $arr;}$bubble_start_time = microtime(true);$bubble_sort = bubbleSort($arr);$bubble_end_time = microtime(true);$bubble_need_time = $bubble_end_time - $bubble_start_time;print_r('冒泡排序耗時:' . $bubble_need_time . '<br />');//3 選擇排序function selectionSort($arr){    $count = count($arr);    for ($i = 0; $i < $count - 1; $i++) {        //找到最小的值        $min = $i;        for ($j = $i + 1; $j < $count; $j++) {            //由小到大排列            if ($arr[$min] > $arr[$j]) {                //表明當(dāng)前最小的還比當(dāng)前的元素大                $min = $j;                //賦值新的最小的            }        }        /*swap$array[$i]and$array[$min]即將當(dāng)前內(nèi)循環(huán)的最小元素放在$i位置上*/        if ($min != $i) {            $temp = $arr[$min];            $arr[$min] = $arr[$i];            $arr[$i] = $temp;        }    }    return $arr;}$selection_start_time = microtime(true);$selection_sort = selectionSort($arr);$selection_end_time = microtime(true);$selection_need_time = $selection_end_time - $selection_start_time;print_r('選擇排序耗時:' . $selection_need_time . '<br />');//4 并歸排序//merge函數(shù)將指定的兩個有序數(shù)組(arr1arr2,)合并并且排序//我們可以找到第三個數(shù)組,然后依次從兩個數(shù)組的開始取數(shù)據(jù)哪個數(shù)據(jù)小就先取哪個的,然后刪除掉剛剛?cè)∵^///的數(shù)據(jù)function al_merge($arrA, $arrB){    $arrC = array();    while (count($arrA) && count($arrB)) {        //這里不斷的判斷哪個值小,就將小的值給到arrC,但是到最后肯定要剩下幾個值,        //不是剩下arrA里面的就是剩下arrB里面的而且這幾個有序的值,肯定比arrC里面所有的值都大所以使用        $arrC[] = $arrA['0'] < $arrB['0'] ? array_shift($arrA) : array_shift($arrB);    }    return array_merge($arrC, $arrA, $arrB);}//歸并排序主程序function al_merge_sort($arr){    $len = count($arr);    if ($len <= 1)        return $arr;//遞歸結(jié)束條件,到達這步的時候,數(shù)組就只剩下一個元素了,也就是分離了數(shù)組    $mid = intval($len / 2);//取數(shù)組中間    $left_arr = array_slice($arr, 0, $mid);//拆分?jǐn)?shù)組0-mid這部分給左邊left_arr    $right_arr = array_slice($arr, $mid);//拆分?jǐn)?shù)組mid-末尾這部分給右邊right_arr    $left_arr = al_merge_sort($left_arr);//左邊拆分完后開始遞歸合并往上走    $right_arr = al_merge_sort($right_arr);//右邊拆分完畢開始遞歸往上走    $arr = al_merge($left_arr, $right_arr);//合并兩個數(shù)組,繼續(xù)遞歸    return $arr;}$merge_start_time = microtime(true);$merge_sort = al_merge_sort($arr);$merge_end_time = microtime(true);$merge_need_time = $merge_end_time - $merge_start_time;print_r('并歸排序耗時:' . $merge_need_time . '<br />');//5 快速排序function quickSort(&$arr){    if(count($arr)>1){        $k=$arr[0];        $x=array();        $y=array();        $_size=count($arr);        for($i=1;$i<$_size;$i++){            if($arr[$i]<=$k){                $x[]=$arr[$i];            }elseif($arr[$i]>$k){                $y[]=$arr[$i];            }        }        $x=quickSort($x);        $y=quickSort($y);        return array_merge($x,array($k),$y);    }else{        return$arr;    }}$quick_start_time = microtime(true);$quick_sort = al_merge_sort($arr);$quick_end_time = microtime(true);$quick_need_time = $quick_end_time - $quick_start_time;print_r('快速排序耗時:' . $quick_need_time . '<br />');

    耗時對比

    插入排序耗時:1.2335460186005
    冒泡排序耗時:2.6180219650269
    選擇排序耗時:1.4159741401672
    并歸排序耗時:0.17212891578674
    快速排序耗時:0.16736888885498

    PHP編程

    鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

  • 發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發(fā)表
    主站蜘蛛池模板: 久久超 | 99国产精品欲a | 斗罗破苍穹在线观看免费完整观看 | 国产精品99久久久久久大便 | 看免费毛片 | 一级毛片播放 | 在线中文日韩 | 九九热在线观看视频 | 99热久草 | 黄污免费网站 | 黄色免费电影网址 | 成人一级黄色大片 | 斗罗破苍穹在线观看免费完整观看 | av影院在线播放 | 国产二区三区视频 | 中文字幕一区在线观看视频 | 国产免费一级 | 国产美女一区二区在线观看 | 久久精品视频亚洲 | 久久免费激情视频 | 美女网站黄在线观看 | 国产成人综合在线观看 | 日本成人一区 | 黄色影院网站 | 国产免费观看电影网站 | 久久艹国产精品 | 嗯~啊~用力~高h | 午夜视频在线观 | 国产98色在线 | 午夜视频导航 | 久久国产精品免费视频 | 在线日韩亚洲 | 色污视频 | 久久精品免费网站 | 午夜视频福利 | 欧美成人小视频 | 亚洲小视频在线播放 | 国产一区二区久久精品 | 免费a级观看 | 操嫩草| 免费a视频在线观看 |