演算法與資料結構系列 ( 二 ) - 實現前的基礎準備

Tim-AutumnWind發表於2020-03-19

基礎準備

我的使用驗算的步驟是
生成資料 -> 記錄時間 -> 進行排序 -> 記錄時間 -> 驗算是否正確 -> 歸類時間
那麼我們,需要生成資料的函式,達到毫秒的函式,可以測算出是否已經排序成功的函式

首先生成可用測試的隨機資料(函式)

  • 這是驗算的資料,所以只需要混交的就行
  • 通過傳入所需要生成的總數,生成 num 條資料,比如:10 條
  • 資料內容是隨機從開始到結束的數字,比如:從 1 到 10
  • 注意 rangeR 要比 rangeL
    /**
    * 生成隨機資料
    * @param int $num 需要生成的總數
    * @param int $rangeL   開始數字
    * @param int $rangeR   結束數字
    * @return array
    */
    function generateSort(int $num,int $rangeL,int $rangeR):array {
      $sort = array();
      for ($i = 0; $i < $num;$i++){
          $sort[$i] = rand($rangeL,$rangeR);
      }
      return $sort;
    }

還有生成一種近乎有序的資料(函式)

  • 和上面類似
  • 但是隨機最小值會往上走,達到近乎有序
    /**
    * 生成隨機資料
    * @param int $num 需要生成的總數
    * @param int $rangeL   開始數字
    * @param int $rangeR   結束數字
    * @return array
    */
    function generateSort(int $num,int $rangeL,int $rangeR):array {
      $sort = array();
      for ($i = 0; $i < $num;$i++){
          $sort[$i] = rand($rangeL + $i,$rangeR);
      }
      return $sort;
    }

驗算是否排序正確的(函式)

  • 我這裡做的比較簡單
  • 迴圈一次,當上一個數字,比下一個數字要小的時候則是不正確
  • 在我們生成數字的時候,是絕對不會相對有序的
    /**
    * 驗算是否正確
    * @param array $sort
    * @return bool
    */
    function isSort(array $sort):bool {
      $n  =   count($sort);
      for($i = 0; $i < $n - 1; $i++){
          if($sort[$i] > $sort[$i + 1]){
              return false;
          }
      }
      return true;
    }

獲取毫秒時間(函式)

  • php 中是沒有毫秒函式的,只能自己寫一個
  • 在資料量小的情況下,演算法是按照毫秒計算的,不是秒
    /**
    * 獲取毫秒時間
    * @return float
    */
    function millisecond():float {
      list($msec, $sec) = explode(' ', microtime());
      return (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
    }

    列印函式

  • 因為我們用的是原生的 php,而且用的是 fpm
  • 資料列印在瀏覽器上,為了我們的視覺感受,我覺得這個有必要
    /**
    * 一個好看一點的列印函式
    * @param $var
    */
    function dump($var){
      ob_start();
      var_dump($var);
      $output = preg_replace('/\]\=\>\n(\s+)/m', '] => ', ob_get_clean());
      if (!extension_loaded('xdebug')) {
          $output = htmlspecialchars($output, ENT_SUBSTITUTE);
      }
      $output = '<pre>' . $output . '</pre>';
      echo($output);
    }
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章