php復習,PHP排序算法的復習和總結

直接上代碼吧!

/*

* 插入排序(一維數組)

* 每次將一個待排序的數據元素,插入到前面已經排好序的數列中的適當的位置,使數列依然有序;直到待排序的數據元素全部插入完成為止。

*/

function insertSort($arr){

if(!is_array($arr) || count($arr)==0){

return $arr;

}

$count = count($arr);

for($i=1; $i

if(isset($arr[$i])){

$tmp = $arr[$i]; //獲取后一個元素的值

$j = $i - 1; //獲取前面的下標

while($arr[$j] > $tmp){ //如果前面一個比后面一個大, 這里是從小到大

$arr[$j+1] = $arr[$j]; //把小的元素和前面的對換,直到移動到合適的位置,在移動下一個

$arr[$j] = $tmp;

$j--;

}

}

}

return $arr;

}

/*

* 選擇排序(一維數組)

* 每一趟從待排序的數據元素中選出最小(最大)的一個元素,順序放在已排好序的數列的最后,直到全部待排序的數據元素排完。

*/

function selectSort($arr){

if(!is_array($arr) || count($arr) == 0)

{

return $arr;

}

$count = count($arr);

for($i=0; $i

$k = $i;

for($j=$i+1; $j

if ($arr[$k] > $arr[$j])

$k = $j; //找出最小的

if ($k != $i){

$tmp = $arr[$i];

$arr[$i] = $arr[$k];

$arr[$k] = $tmp;

}

}

}

return $arr;

}

/*

* 冒泡排序(一維數組)

* 兩兩比較待排序數據元素的大小,發現兩個數據元素的次序相反即進行交換,直到沒有反序的數據元素為止

*/

function bubbleSort($array){

$count = count($array);

if ($count <= 0) {

return false;

}

for($i=0; $i

for($j=$count-1; $j>$i; $j--){

if ($array[$j] < $array[$j-1]){ //比較找到的數進行交換

$tmp = $array[$j];

$array[$j] = $array[$j-1];

$array[$j-1] = $tmp;

}

}

}

return $array;

}

/*

* 快速排序(一維數組)

*

*/

function quickSort($array){

if (count($array) <= 1){

return $array;

}

$key = $array[0];

$left_arr = array();

$right_arr = array();

for ($i=1; $i

if ($array[$i] <= $key){

$left_arr[] = $array[$i];

}else{

$right_arr[] = $array[$i];

}

}

$left_arr = quickSort($left_arr);

$right_arr = quickSort($right_arr);

return array_merge($left_arr, array($key), $right_arr);

}

/**

* 按照元素的值進行排序

* strOrder 為排列的順序 asc 升序 desc 降序

*/

function sortByVal($arr,$strOrder='asc')

{

if(!is_array($arr) || count($arr)==0)

{

return $arr;

}

$arrReturn = array();

foreach($arr as $key=>$val)

{

$arrKey[] = $key;

$arrVal[] = $val;

}

$count = count($arrVal);

if($count)

{

//創建key的順序數組

for($key=0;$key

{

$arrKeyMap[$key] = $key;

}

//對值進行排序

for($i=0;$i

{

for($j = $count-1; $j>$i;$j--)

{

//

$bol = $strOrder == 'asc' ? $arrVal[$j]$arrVal[$j-1];

if($bol){

$tmp = $arrVal[$j];

$arrVal[$j] = $arrVal[$j-1];

$arrVal[$j-1] = $tmp;

//值的冒泡排序,引起key的數組的交互

$keytmp = $arrKeyMap[$j];

$arrKeyMap[$j] = $arrKeyMap[$j-1];

$arrKeyMap[$j-1] = $keytmp;

}

}

}

if(count($arrKeyMap))

{

foreach ($arrKeyMap as $val)

{

$arrReturn[] = $arrKey[$val];

}

}

return $arrReturn;

}

}

/**

* 使用原生的函數進行數組按照值進行排列

*/

function arraySortByVal($arr,$keys,$type='asc'){

$keysvalue = $new_array = array();

foreach ($arr as $k=>$v){

$keysvalue[$k] = $v[$keys];

}

if($type == 'asc'){

asort($keysvalue);

}else{

arsort($keysvalue);

}

reset($keysvalue);

foreach ($keysvalue as $k=>$v){

$new_array[$k] = $arr[$k];

}

return $new_array;

}

對于下面的2個對于array的值進行排序的方法一個是自己實現的一個是使用了原生的PHP函數的,其實排序對于少量數據一般就單頁的數據量的數據還是可以的,如果涉及到大量的數據的排序,建議可以整合到MYSQL的基礎類中來進行。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539545.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539545.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539545.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

docker-machine

vbox安裝 sudo /sbin/vboxconfig &#xfffc; yum install gcc make yum install kernel-devel-3.10.0-514.26.2.el7.x86_64 轉載于:https://www.cnblogs.com/yixiaoyi/p/dockermachine.html

intention lock_寫作技巧:你寫出來的情節有用嗎?好情節的原則——LOCK系統

讀者喜歡一本小說的原因只有一個&#xff1a;很棒的故事。——Donald Maass來&#xff0c;話筒對準這位小作家&#xff0c;請問你是如何構思故事的&#xff1f;是習慣于現在腦海中把故事都想好了&#xff0c;才開始寫作&#xff1f;還是習慣于臨場發揮&#xff0c;喜歡一屁股坐…

zookeeper基本操作

1.客戶端連接 [txtest1 bin]$ jps 23433 Jps 23370 QuorumPeerMain #zookeeper進程[txtest1 bin]$ ./zkCli.sh -server test1:2182 Connecting to test1:2182 2018-01-24 23:42:09,024 [myid:] - INFO [main:Environment100] - Client environment:zookeeper.version3.4.5-…

sqllite java 密碼,SQLite登錄檢查用戶名和密碼

我正在創建一個應用程序(使用Java和SQLite)(JFrame&#xff0c;使用Netbeans)我有我想要登錄的用戶 . (我有所有正確的包JDBC&#xff0c;SQLite等)我遇到的問題似乎是獲取用戶名/密碼來檢查我的users.db文件..我正在使用Java和SQLite . 我也在使用JDBC .我的一些代碼作為一個例…

springmvc與struts2的區別

1&#xff09;springmvc的入口是一個servlet&#xff0c;即前端控制器&#xff0c;例如&#xff1a;*.action struts2入口是一個filter過慮器&#xff0c;即前端過濾器&#xff0c;例如&#xff1a;/* 2&#xff09;springmvc是基于方法開發&#xff0c;傳遞參數是通過方法形…

power designer數據流圖_鯤云公開課 | 三分鐘帶你了解數據流架構

目前&#xff0c;市場上的芯片主要包括指令集架構和數據流架構兩種實現方式。指令集架構主要包括X86架構、ARM架構、精簡指令集運算RISC-V開源架構&#xff0c;以及SIMD架構。總體來說&#xff0c;四者都屬于傳統的通用指令集架構。傳統的指令集架構采用馮諾依曼計算方式&#…

onCreate源碼分析

原文地址Android面試題-onCreate源碼都沒看過&#xff0c;怎好意思說自己做android Activity扮演了一個界面展示的角色&#xff0c;堪稱四大組件之首&#xff0c;onCreate是Activity的執行入口&#xff0c;都不知道入口到底干了嘛&#xff0c;還學什么android,所以本文會從源碼…

linux php環境搭建教程,linux php環境搭建教程

linux php環境搭建的方法&#xff1a;首先獲取相關安裝包&#xff1b;然后安裝Apache以及mysql&#xff1b;接著修改配置文件“httpd.conf”&#xff1b;最后設置環境變量和開機自啟&#xff0c;并編譯安裝PHP即可。一、獲取安裝包PHP下載地址&#xff1a;http://cn.php.net/di…

Apache2.2與Tomcat7集成方案詳解

原文地址&#xff1a;http://my.oschina.net/u/919173/blog/159206 ------------------------------------ 首先談一下為什么要集成Apache和tomcat7&#xff1f; Apache是當前使用最為廣泛的WWW服務器軟件&#xff0c;具有相當強大的靜態HTML處理的能力。 Tomcat服務器是一個…

cocos 制作動態生成內容的列表_零代碼工具,讓你在線輕松制作交互內容!

在工作中設計師不會寫代碼&#xff0c;懂代碼的不會設計&#xff0c;2種不同工作互掐的情況屢見不鮮&#xff0c;那我們如何把這2項工作一并融合貫通呢&#xff1f;對于不懂代碼的職場“小白”&#xff0c;我們可以利用一些零代碼工具來完成。今天小編介紹幾款在線開發設計工具…

php怎樣數據緩存文件,php數據緩存到文件類設計

// 自定義緩存類class Cache_Filesystem {// 緩存寫保存function set ($key, $data, $ttl) {//打開文件為讀/寫模式$h fopen($this->get_filename($key), ‘a‘);if (!$h) throw new Exception("Could not write to cache");flock($h, LOCK_EX); //寫鎖定&#x…

jsp放在web-inf下的注意事項

原文&#xff1a;http://blog.csdn.net/whatlookingfor/article/details/38381881 ------------------------------------------------- web-inf目錄是不對外開放的&#xff0c;外部沒辦法直接訪問到。所有只能通過映射來訪問&#xff0c;比如映射為一個action或者servlet通過…

php打印布爾型,PHP數據類型之布爾型的介紹_PHP

布爾類型是PHP中 最簡單的類型。它的值可以為 TRUE 或 FALSE。如&#xff1a;$foofalse;$foo1true;echo "為假時輸出值為:".$foo; //沒有輸出值echo "為真時輸出值為:".$foo1; //輸出1這里主要的細節&#xff1a;當轉換為 boolean 時&#xff0c;以下值被認…

oracle 如何終止存儲過程的運行

0.查詢正在執行的存儲過程&#xff1a; select * from v$db_object_cache where locks > 0 and pins > 0 and typePROCEDURE;1. 在V$ACCESS視圖中找到要停止進程的SID: 舉例&#xff1a;存儲過程名&#xff1a;CRH_ENTRY SELECT t.* FROM V$ACCESS t WHERE t.objectCRH_…

python install zabbix.4.0

1.安裝 MySQLdb 模塊; #!/bin/bash #this is rpm python Environment depends on function depends_rpm(){ yum clean all yum -y install gcc* python-devel python-pip mariadb mariadb-devel mariadb-server if [ $? -eq 0 ]thenpip install MySQL-python1.2.5 elsee…

asp.net 獲取全部在線用戶_Qamp;A | 在線考試問卷答疑

01.如何批量導入試題&#xff1f;如果您已經在word或者excel中準備好了考試文檔&#xff0c;通過批量導入試題的方式&#xff0c;可以讓考試問卷的制作更加方便快捷。詳細了解批量導入考試的文本格式&#xff1a;【點擊此處】02.如何進行考試隨機抽題&#xff1f;老師事先建立題…

PHP 框架 模塊化,Laravel 的模塊化開發框架 Notadd RC1

本文我們要和大家分享 Laravel 的模塊化開發框架 Notadd RC1 的介紹&#xff0c;它的優點是修復了首頁編輯模式下滾動的BUG (Eleven)&#xff0c;修復了后臺菜單管理修改后不跳轉的BUG (ganlanshu0211)&#xff0c;修復后臺 ESLint 的 Camelcase 的錯誤 (狒狒)&#xff0c;暫時…

spring mvc 工作流程

1A&#xff09;客戶端發出http請求&#xff0c;只要請求形式符合web.xml 文件中配置的*.action的話&#xff0c;就由DispatcherServlet 來處理。 1B&#xff09;DispatcherServlet再將http請求委托給映射器 的對象來將http請求交給對應的Action來處理 2&#xff0…

9-2 鏈表

package gather;import java.util.LinkedList; import java.util.List; import java.util.ListIterator;public class TestFour {public static void main(String[] args) {// TODO Auto-generated method stub/*** 1、通過整數遍歷元素時&#xff0c;不要使用鏈表結構&#xf…