php實現的幾種基本演算法
一直以來,演算法在我的認知裡都很神奇。因為它們總在不經意之間就改變了世界。我們也是後來的得益者,站在巨人的肩膀上,才能看的更遠。感謝那些不曾認識的甲乙丙。
建議去看見下我的另一篇文章,關於時間複雜度的介紹,連結,有助於大家科學的瞭解演算法的優劣
氣泡排序
/* * 氣泡排序 (效率比較低) * * 外層迴圈決定迴圈層數 * 內層,兩兩比較,交換位置 * 每層迴圈過後,後面的值總是有序的最大(最小)的值,下次就無需去比較他們。 * 加入變數flag,如果沒有交換位置,則說明順序是對的,可以跳出迴圈結束了 */ $arr = array(); $arr = array(1,98,5,34,23,87,54,23,12,0,456,123,45); $len = count($arr); for($i=1;$i<$len;$i++){ $flag = true; for($j=0;$j<$len-$i;$j++){ if($arr[$j]>$arr[$j+1]){ $flag = false; $temp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] =$temp; } } if($flag){ break; } } print_r($arr);
選擇排序
/* * 選擇排序 (比冒泡效率高) * * 外層決定迴圈層數 * 選擇排序就是預設當前值為最小值,記錄下標,然後進行迴圈比較,記錄最小(最大)值的下標,最後交換兩者的值。這樣第一個值就是最小(最大)值。 * 然後,依次,迴圈下去。最後得到的就是有序的陣列 */ $arr = array(); $arr = array(1,98,5,34,23,87,54,23,12,0,456,123,45); $len = count($arr); for($i=0;$i<$len-1;$i++){ $p = $i; //預設當前位置的值即為最小,記錄下下標。 for($j=$p+1;$j<$len;$j++){ if($arr[$p]>$arr[$j]){ $p = $j; //如果當前值比預設值小。則記錄其下標 } } if($p !=$i){ $temp = $arr[$p]; $arr[$p] = $arr[$i]; $arr[$i] = $temp; } } print_r($arr);
插入排序(效率也比冒泡快)
/* * 插入排序 * * 外層決定迴圈層數,把當前值作為插入值去和前面的值進行比較 * 前面的值總是有序的,插入的值只需要和前面的值進行比較,確定最終位置就可以了 * 迴圈排序就好了 */ $arr = array(); $arr = array(1,98,5,34,23,87,54,23,12,0,456,123,45); $len = count($arr); for($i=1;$i<$len;$i++){ $temp = $arr[$i]; for($j=$i-1;$i>=0;$j--){ if($arr[$j]>$temp){ $arr[$j+1] = $arr[$j]; $arr[$j] = $temp; }else{ break; } } } print_r($arr);
快速排序 (20世紀十大排序方法之一)
/*
* 快速排序
*
* 首先選取一個值,作為標尺,把大於他的放到right_array中,小於他的放到left_array中,遞迴呼叫
* 直到陣列數為1,則返回,最後合併起來就是結果
*/
function quick_sort($arr) {
//先判斷是否需要繼續進行
$length = count($arr);
if($length <= 1) {
return $arr;
}
//如果沒有返回,說明陣列內的元素個數 多餘1個,需要排序
//選擇一個標尺
//選擇第一個元素
$base_num = $arr[0];
//遍歷 除了標尺外的所有元素,按照大小關係放入兩個陣列內
//初始化兩個陣列
$left_array = array();//小於標尺的
$right_array = array();//大於標尺的
for($i=1; $i<$length; $i++) {
if($base_num > $arr[$i]) {
//放入左邊陣列
$left_array[] = $arr[$i];
} else {
//放入右邊
$right_array[] = $arr[$i];
}
}
//再分別對 左邊 和 右邊的陣列進行相同的排序處理方式
//遞迴呼叫這個函式,並記錄結果
$left_array = quick_sort($left_array);
$right_array = quick_sort($right_array);
//合併左邊 標尺 右邊
return array_merge($left_array, array($base_num), $right_array);
}
$arr = array(1,98,5,34,23,87,54,23,12,0,456,123,45);
$res = quick_sort($arr);
print_r($res);die;
千里之行,始於足下。加油!
相關推薦
php實現的幾種基本演算法
一直以來,演算法在我的認知裡都很神奇。因為它們總在不經意之間就改變了世界。我們也是後來的得益者,站在巨人的肩膀上,才能看的更遠。感謝那些不曾認識的甲乙丙。 建議去看見下我的另一篇文章,關於時間複雜度
用php實現幾種常見的排序演算法
一、氣泡排序 氣泡排序理解起來是最簡單,但是時間複雜度(O(n^2))也是最大的之一,實現程式碼如下: function bubbleSort($arr) { $len = count(
php實現八種排序演算法
<?php /** * Created by PhpStorm. * User: frowhy * Date: 2017/4/4 * Time: 04:14 * *_______________%%%%%%%%%_____________________
模式識別的幾種基本演算法
本學期選了模式識別的課程,該期末考試了, 將本課程的幾種基本演算法整理一下。 0.最小距離分類判別演算法 (1)定義:是指求出未知類別向量到要識別各類別代表向量中心點的距離,將未知類別向量歸屬於距離最小一類的一種影象分類方法。 (2)用Matlab實現
學習筆記---PHP中幾種加密演算法(MD5,shal,base64_encode等)
PHP中有多種加密演算法。 1.md5()—–不可逆,無解密演算法 md5(string $str[,bool $raw_output = false|true]); 引數: $str:待加密的字串 $raw_output:可選引數為true或
Python實現幾種簡單的排序演算法
一.氣泡排序 概念:為一個無序的列表排成有序的 實現過程描述:(升序) 1.比較相鄰的元素,如果第一個比第二個大,就交換他們的位置 2.對每一對相鄰元素重複1的工作,從開始第一隊到最後一對,最後結束的時候最大的數會在後面 3.針對所有元素重複1,2的工作,除了最後一個數,因為最後的數最大
總結幾種排序演算法的Java實現
1、氣泡排序 氣泡排序是一種交換排序,它的基本思想是:兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止。 Java程式碼: import java.util.Random; public class BubbleSort { /** * 改進的氣
Python Numpy 100題實驗(九):幾種標準化演算法實現
單獨把這幾道題目拿出來,歸為一類吧,都是標準化演算法。 本講的主要內容: Z-Score標準化演算法 Min-Max標準化演算法 應用L2正規化標準化資料 使用Z-Score標準化演算法對資料進行標準化處理 首先給出Z-Score標準化公式: Z=X−mea
幾種基本的排序演算法總結
準備函式 var arr = [] function swap(arr, a, b) { //交換函式 var temp = arr[a] arr[a] = arr[b] arr[b] = temp } function random_ar
幾種常見演算法的Python實現
1、選擇排序 選擇排序是一種簡單直觀的排序演算法。它的原理是這樣:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的後面,以此類推,直到所有元素均排序完畢。演算法實現如下: #找到最小的元素 def Fin
幾種排序演算法java實現
沒有配圖,過幾天補上 package com.sort; public class Sort { /** * 插入排序 * 原理:往有序的子陣列選擇一個合適的位置插進去 * */ public void insertSort(int sort[
幾種壓縮演算法實現原理詳解
gzip 、zlib以及圖形格式png,使用的壓縮演算法都是deflate演算法。從gzip的原始碼中,我們瞭解到了defalte演算法的原理和實現。我閱讀的gzip版本為 gzip-1.2.4。下面我們將要對deflate演算法做一個分析和說明。首先簡單介紹一下基本原理,
幾種排序演算法實現以及穩定性
穩定性演算法:氣泡排序、插入排序、歸併排序、基數排序 不穩定性演算法:選擇排序、快速排序、堆排序、希爾排序、桶排序 /** * * @author huangsen * 插入排序:一個有序陣列,一個無序陣列,將無序陣列插入到有序陣列中 * */ public
nginx實現http負載均衡的幾種排程演算法具體補充
首先知道一點: upstream 支援的狀態引數 在HTTP Upstream模組中,可以通過server指令指定後端伺服器的IP地址和埠,同時還可以設定每個後端伺服器在負載均衡排程中的狀態。
php幾種常用演算法
寫一下幾種常見排序演算法,清一下腦子 歸併排序 /** * Created by PhpStorm. * User: leon * Date: 2018/3/14 * Time: 下午2:37 */ function mergeSort(&am
隨機生成100個數,利用幾種排序演算法對其實現排序(C++)
#include<iostream> #include<cstdlib> #include<ctime> using namespace std; //交換 template<class T> void Swap(T &a,T &b) {
幾種排序演算法實現分析
合併排序 void merge(int a[],int left,int mid,int right,int b[]) { int i = left; int j = mid +1; int k = left; while(i&
幾種基本排序算法總結
子序列 system aop 大於等於 != pri i++ index 元素移動 以下均采用從小到大排序: 1.選擇排序算法 個人覺得選擇排序算法是容易理解的排序算法,即從n個元素中選擇最小的一個元素與第一個元素交換,再將除第一個元素之外的n-1個元素找到最小的一
幾種基本的數字正則表達式[轉]
包含 沒有 美國 100% 小數 小靈通 表達式 擴展名 aid 只能輸入1個數字 表達式 ^\d$ 描述 匹配一個數字 匹配的例子 0,1,2,3 不匹配的例子 只能輸入n個數字 表達式 ^\d{n}$ 例如^\d{8}$ 描述 匹配8個
字符串截取的幾種基本方法
字符串截取 clas mov logs reg -a expr body regex 分享幾個經常用到的字符串的截取 string str="123abc456";int i=3;1 取字符串的前i個字符 str=str.Substring(0,i); //