php 基礎演算法
tips: php基礎演算法 雞尾酒來源於網路
<?php // 一個數組 $arr = [3,7,4,8,0,34,67,3,38,54,76,9,25,74,44]; // 氣泡排序 O(N^2) 可進行邊界值優化 減少比較排序次數,雞尾酒同 function MaoPao($arr) { $count = count($arr); for ($i = 0; $i < $count; $i++) { for ($j = $count - 1; $j > $i ; $j--) { if ($arr[$j] < $arr[$j - 1]) { $_tmp = $arr[$j]; $arr[$j] = $arr[$j - 1]; $arr[$j - 1] = $_tmp; } } } return $arr; } // $arr_maopao = MaoPao($arr); // echo "氣泡排序:"; // print_r($arr_maopao); // echo "\r\n"; # 雞尾酒排序 # 思路:基於冒泡 ,但是先正序排,然後倒序排(並加以冒泡的改進演算法) function cocktailSort($arr,$sort='asc'){ $sorted = false; $bottom = 0; $top = count($arr)-1; while(!$sorted){ $sorted = true; for ($i = $bottom; $i < $top; $i++) { if(($arr[$i]>$arr[$i+1]&&$sort=='asc')||($arr[$i]<$arr[$i+1]&&$sort=='desc')){ $temp = $arr[$i+1]; $arr[$i+1] = $arr[$i]; $arr[$i] = $temp; $sorted = false;//需要交換元素說明陣列還沒有被排序好 } } //然後再反向走一趟 //$top-1是因為擁有最大(小)值的元素已經在陣列的頂端位置了 $top--; for ($i = $top; $i > $bottom; $i--) { if(($arr[$i]<$arr[$i-1]&&$sort=='asc')||($arr[$i]>$arr[$i-1]&&$sort=='desc')){ $temp = $arr[$i-1]; $arr[$i-1] = $arr[$i]; $arr[$i] = $temp; $sorted = false; } } //$bottom+1是因為是擁有最小(大)值得元素已經在陣列的底部 $bottom++; } return $arr; } // $res = cocktailSort($arr); // var_dump($res); # 快速排序 # 思路:存在多個無序,則以基準數拆分數列 最終結果類似為中序遍歷二叉樹 function KuaiPai ($arr) { $count = count($arr); // $key = $arr[0]; // 基準數 $left = $right = array(); // 定義新分割槽 $l_len = $r_len = 0; // 記錄左右分割槽長度 for ($i = 1; $i < $count; $i++) { if ($arr[$i] < $arr[0]) { $left[] = $arr[$i]; $l_len++; } else { $right[] = $arr[$i]; $r_len++; } } if ($l_len > 1) { $left = KuaiPai($left); } if ($r_len > 1) { $right = KuaiPai($right); } // $new_arr = $left; $new_arr = []; $new_arr = $left; $new_arr[] = $arr[0]; // array_merge($new_arr,$right); for($i = 0; $i < $r_len; $i++) { $new_arr[] = $right[$i]; } return $new_arr; } // $arr_kp = KuaiPai($arr); // echo "快速排序:"; // print_r($arr_kp); // echo "\r\n"; // 選擇排序 n^2 / 2 選出最小值 function XuanZe ($arr) { $count = count($arr);//獲取陣列長度 for ($i = 0; $i < $count - 1; $i++) { $_min = $arr[$i]; $_min_sub = $i; // 定位最小值下標進行交換 for ($j= $i + 1; $j < $count; $j++) { if ($arr[$j] < $_min) { $_min = $arr[$j]; $_min_sub = $j; } } $arr[$_min_sub] = $arr[$i]; $arr[$i] = $_min; } return $arr; } // $arr_xz = XuanZe($arr); // echo "選擇排序:"; // print_r($arr_xz); // echo "\r\n"; // 插入排序 n^2 // 每步將一個待排序的紀錄,按其關鍵碼值的大小插入前面已經排序的檔案中適當位置上,直到全部插入完為止。 function ChaRu ($arr) { $len=count($arr); for($i=1; $i<$len; $i++) { $tmp = $arr[$i]; //內層迴圈控制,比較並插入 for($j=$i-1;$j>=0;$j--) { if($tmp < $arr[$j]) { //發現插入的元素要小,交換位置,將後邊的元素與前面的元素互換 $arr[$j+1] = $arr[$j]; $arr[$j] = $tmp; } else { //如果碰到不需要移動的元素,由於是已經排序好是陣列,則前面的就不需要再次比較了。 break; } } } return $arr; } $arr_cr = ChaRu($arr); echo "插入排序:"; print_r($arr_cr); echo "\r\n";
相關推薦
一些php基礎演算法
/** * @param $n * 拉斐那契數列 */ function fibonacci1($n) { if ($n == 1) { return [1]; } if ($n == 2) { return [1, 1]; }
php 基礎演算法
tips: php基礎演算法 雞尾酒來源於網路 <?php // 一個數組 $arr = [3,7,4,8,0,34,67,3,38,54,76,9,25,74,44]; // 氣泡排序 O(N^2) 可進行邊界值優化 減少比較排序次數,雞尾酒同 fun
php基礎演算法之完整“菱形”
在網上搜了一下php演算法中的菱形畫法,也許是我沒找全的緣故,結果發現幾乎在所有的能搜出來的演算法中,菱形都只畫了一半,我想這可能是大量轉載的原因吧,so,鄙人特地寫了一個完整的菱形畫法,如下,如有不妥,歡迎各位批評指正^_^ <?php /** *author
php四種基礎演算法:冒泡,選擇,插入和快速排序法 程式碼練習
function maopao($arr,$len) { for($i=1;$i<$len;$i++) { for($j=0;$j<$len-$i;$j++) { if($arr[$j]>$arr[$j+1])
PHP演算法之四大基礎演算法
前言 雖然工作中,你覺得自己並沒有涉及到演算法這方面的東西,但是演算法是程式的核心,一個程式的好與差,關鍵是這個程式演算法的優劣,所以對於氣泡排序、插入排序、選擇排序、快速排序這四種基本演算法,我想還是要掌握的。 氣泡排序法 氣泡排序大概的意思是依次比較相鄰的兩個
php 四種基礎演算法集合
// 排序演算法學習 // 1:氣泡排序 // 思路分析:在要排序的一組數中,對當前還未排好的序列,從前往後對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即,每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。 // //程式碼實現: $
php 4大基礎演算法
/** * 氣泡排序 * 思路:每次迴圈排列出一個最大的數 */ public function mao_paoOp(){ $data = a
PHP四種基礎演算法詳解
許多人都說 演算法是程式的核心,一個程式的好於差,關鍵是這個程式演算法的優劣。作為一個初級phper,雖然很少接觸到演算法方面的東西 。但是對於氣泡排序,插入排序,選擇排序,快速排序四種基本演算法,我想還是要掌握的。 需求:分別用 氣泡排序法,快速排序法,選擇排序法,插入排序法將下面陣列中 的值按照從小
php四種基礎演算法
function quick_sort($arr) { //先判斷是否需要繼續進行 $length = count($arr); if($length <= 1) { return $arr; } //如果沒有返回,說明陣列內的元素個數 多餘1個,需要排序 //選擇一個標尺 //選擇第一個元素 $ba
PHP 四種基礎演算法
氣泡排序 思路:每次迴圈排列出一個最大的數 選擇排序 思路:每一趟在n-i+1(i = 1,2,…,n-1)個記錄中選擇關鍵字最小的記錄作為有序序列中第i個記錄,其中最簡單的是簡單選擇排序
php四種基礎排序(基礎演算法)----①氣泡排序法
氣泡排序法: 顧名思義,如冒泡泡一樣,每次將陣列中最大的數冒出來 舉例: 2,3,1. 第一次先將3冒出來,變成--------> 2,1,3 第二次再講2冒出來,變成--
php四種基礎演算法程式碼例項
php四種基礎演算法:冒泡,選擇,插入和快速排序法 許多人都說 演算法是程式的核心,一個程式的好於差,關鍵是這個程式演算法的優劣。作為一個初級phper,雖然很少接觸到演算法方面的東西 。但是對於氣泡排序,插入排序,選擇排序,快速排序四種基本演算法,我想還是要掌握的。下面是
php基礎語法
弱類型 打印數組 類型 錯誤 比較 tty 同時 中文 大寫 js是前段腳本語言 php是後端腳本語言 一、所建的文件都要存在wap下的www裏面 二、所有的文件名都不能包含中文 三、通過輸入 localhost/www下的文件名稱,可以瀏覽 四、在DW內新建站點,更改站點
php基礎
png 環境 com ges 本地 目錄 path img system32 DocumentRooot 程序開發目錄 Directory:可以設置目錄權限 DirectoryIndex: 程序訪問路進,默認查找的文件 本地host文件 C:\Windows\System3
php 基礎
code ctype eth for html col 報錯 ext 三種 1.php內可以書寫html 代碼 2.php傳輸方式 為 $_GET,$_POST,$_REQUEST 三種方式 <!DOCTYPE html> <html lang="en"
php基礎-數組
-1 一個 ont head del 裏的 () com 技術分享 PHP數組 PHP有兩種數組:索引數組、關聯數組。 索引數組 簡介 索引數組是指數組的鍵是整數的數組,並且鍵的整數順序是從0開始,依次類推。如下代碼以及示意圖所示: $fruit=
前端向後臺的華麗轉身 — PHP基礎篇
tag 排序算法 四大 查找字符 字符串 explode 通過 比較運算 right 這一次,本K帶大家來看一下關於PHP中數組、字符串的一些註意事項和函數(方法)。 一、PHP中的數組 (一)PHP中的數組簡介 數組類型是PHP兩種復合數據類型之一。根據下標的
php高級進階系列文章--第二篇(PHP基礎知識復習)
new val 大小寫 包括 所在 復習 part option ogl php基礎知識復習 本文中對於簡單的知識點只會提及一下(例如什麽控制結構什麽的),對於較有難度的詳細復習下(例如面向對象的反射等等) 再次申明,本系列文章不是從最基礎的開始復習,對於零基礎的可能不適用
php基礎知識整理
n) 一個 mon 如果 定義變量 += 字段值 insert 劃線 <?php /*PHP 變量 1、PHP 中的所有變量都是以 $ 符號開始的。 2、在 PHP 中設置變量的方法是:$var_name = value;
php基礎17/7/30
php 查詢 light 字符 ddr () quest 靜態 name <?php //變量的作用域 //局部變量 /* function add() { $intData=10; echo $intData; } add(); */ //全局變量 /*