1. 程式人生 > >php 基礎演算法

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(); */ //全局變量 /*