PHP排序算法的复习和总结
对于PHP中对数组的元素进行排序,这个是很经常用到的,之前的项目中也有,而且对于几种排序我们都是用的是asort arsort 等PHP原生函数,没有自己去实现,所以就对一下的几个函数进行总结,这个会不断的进行补充,自己也可以好好的复习和总结
直接上代码吧!
代码如下:
/*
* 插入排序(一维数组)
* 每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当的位置,使数列依然有序;直到待排序的数据元素全部插入完成为止。
*/
function insertSort($arr){
if(!is_array($arr) || count($arr)==0){
return $arr;
}
$count = count($arr);
for($i=1; $iif(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 return false;
}
for($i=0; $ifor($j=$count-1; $j>$i; $j--){
if ($array[$j] $tmp = $array[$j];
$array[$j] = $array[$j-1];
$array[$j-1] = $tmp;
}
}
}
return $array;
}
/*
* 快速排序(一维数组)
*
*/
function quickSort($array){
if (count($array) return $array;
}
$key = $array[0];
$left_arr = array();
$right_arr = array();
for ($i=1; $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的基础类中来进行。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

一、問題背景1、雙邊市場實驗介紹雙邊市場,即平台,包含生產者與消費者兩方參與者,雙方相互促進。例如快手有影片的生產者,影片的消費者,兩種身分可能有一定程度重疊。雙邊實驗是在生產者和消費者端組合分組的實驗方式。雙邊實驗有以下優點:(1)可以同時偵測新策略對兩方面的影響,例如產品DAU和上傳作品人數變化。雙邊平台往往有跨邊網路效應,讀者越多,作者越活躍,作者越活躍,讀者也會跟著增加。 (2)可以檢測效果溢出和轉移。 (3)幫助我們更好得理解作用的機制,AB實驗本身不能告訴我們原因和結果之間的關係,只

Vue技術開發中如何進行資料篩選和排序在Vue技術開發中,資料篩選和排序是非常常見且重要的功能。透過資料篩選和排序,我們可以快速查詢和展示我們需要的信息,提高用戶體驗。本文將介紹在Vue中如何進行資料篩選和排序,並提供具體的程式碼範例,幫助讀者更好地理解和運用這些功能。一、資料篩選資料篩選是指依照特定的條件篩選出符合要求的資料。在Vue中,我們可以透過comp

如何使用C++中的基數排序演算法基數排序演算法是一種非比較性的排序演算法,它透過將待排序的元素分割成一組有限的數字位元來完成排序。在C++中,我們可以使用基數排序演算法來對一組整數進行排序。以下我們將詳細討論如何實作基數排序演算法,並附上具體的程式碼範例。演算法思想基數排序演算法的想法是將待排序的元素分割成一組有限的數字位,然後依序對每個位上的元素進行排序。在每個位元上的排序完

整理|核子可樂,褚杏娟接觸過基礎電腦科學課程的朋友們,肯定都曾親自動手設計排序演算法——也就是藉助代碼將無序列表中的各個條目按升序或降序方式重新排列。這是個有趣的挑戰,可行的操作方法也多元。人們曾投入大量時間探索如何更有效率地完成排序任務。作為一項基礎操作,大多數程式語言的標準庫中都內建有排序演算法。世界各地的程式碼庫中使用了許多不同的排序技術和演算法來在線組織大量數據,但至少就與LLVM編譯器配套使用的C++庫而言,排序程式碼已經有十多年沒有任何變化了。近日,GoogleDeepMindAI小組如今開發出一

如何實現C#中的選擇排序演算法選擇排序(SelectionSort)是一種簡單直觀的排序演算法,其基本思想是每次從待排序元素中選擇最小(或最大)的元素,放到已排序的序列末尾。透過重複這個過程,直到所有元素都排序完成。下面我們來詳細了解如何在C#中實作選擇排序演算法,同時附上具體的程式碼範例。建立選擇排序方法首先,我們需要建立一個用於實作選擇排序的方法。此方法接受一

Swoole是一款基於PHP語言的高效能網路通訊框架,它支援多種非同步IO模式和多種高階網路協定的實作。在Swoole的基礎上,我們可以利用其多執行緒功能來實現高效率的演算法運算,例如高速排序演算法。高速排序演算法(QuickSort)是一種常見的排序演算法,透過定位一個基準元素,將元素分成兩個子序列,小於基準元素的放在左側,大於等於基準元素的放在右側,再對左右子序列遞迴

針對不同場景,選擇合適的PHP數組排序演算法至關重要。冒泡排序適用於小規模數組無穩定性要求的情況;快速排序在大多數情況下時間複雜度最低;歸併排序穩定性高,適用於需要穩定結果的場景;選擇排序適用於無穩定性要求的情況;堆排序高效率找出最大或最小值。透過實戰案例比較,快速排序在時間效率上優於其他演算法,但需要考慮穩定性時應選擇歸併排序。

數組排序演算法用於按特定順序排列元素。常見的演算法類型包括:冒泡排序:透過比較相鄰元素交換位置。選擇排序:找出最小元素交換到目前位置。插入排序:逐一插入元素到正確位置。快速排序:分治法,選擇樞紐元素劃分數組。合併排序:分治法,遞歸排序和合併子數組。
