最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP排序算法的復(fù)習(xí)和總結(jié)

 更新時(shí)間:2012年02月15日 18:28:09   作者:  
對(duì)于PHP中對(duì)數(shù)組的元素進(jìn)行排序,這個(gè)是很經(jīng)常用到的,之前的項(xiàng)目中也有,而且對(duì)于幾種排序我們都是用的是asort arsort 等PHP原生函數(shù),沒(méi)有自己去實(shí)現(xiàn),所以就對(duì)一下的幾個(gè)函數(shù)進(jìn)行總結(jié),這個(gè)會(huì)不斷的進(jìn)行補(bǔ)充,自己也可以好好的復(fù)習(xí)和總結(jié)
直接上代碼吧!
復(fù)制代碼 代碼如下:

<?php
/*
* 插入排序(一維數(shù)組)
* 每次將一個(gè)待排序的數(shù)據(jù)元素,插入到前面已經(jīng)排好序的數(shù)列中的適當(dāng)?shù)奈恢?,使?shù)列依然有序;直到待排序的數(shù)據(jù)元素全部插入完成為止。
*/
function insertSort($arr){
if(!is_array($arr) || count($arr)==0){
return $arr;
}
$count = count($arr);
for($i=1; $i<$count; $i++){
if(isset($arr[$i])){
   $tmp = $arr[$i]; //獲取后一個(gè)元素的值
   $j = $i - 1; //獲取前面的下標(biāo)
   while($arr[$j] > $tmp){ //如果前面一個(gè)比后面一個(gè)大, 這里是從小到大
    $arr[$j+1] = $arr[$j]; //把小的元素和前面的對(duì)換,直到移動(dòng)到合適的位置,在移動(dòng)下一個(gè)
    $arr[$j] = $tmp;
    $j--;
   }
}
}
return $arr;
}
  
/*
* 選擇排序(一維數(shù)組)
* 每一趟從待排序的數(shù)據(jù)元素中選出最?。ㄗ畲螅┑囊粋€(gè)元素,順序放在已排好序的數(shù)列的最后,直到全部待排序的數(shù)據(jù)元素排完。
*/
function selectSort($arr){
if(!is_array($arr) || count($arr) == 0)
{
return $arr;
}
$count = count($arr);
for($i=0; $i<$count; $i++){
$k = $i;
for($j=$i+1; $j<$count; $j++){
  if ($arr[$k] > $arr[$j])
    $k = $j; //找出最小的
   if ($k != $i){
     $tmp = $arr[$i];
     $arr[$i] = $arr[$k];
     $arr[$k] = $tmp;
   }
}
}
return $arr;
}
/*  
* 冒泡排序(一維數(shù)組)
* 兩兩比較待排序數(shù)據(jù)元素的大小,發(fā)現(xiàn)兩個(gè)數(shù)據(jù)元素的次序相反即進(jìn)行交換,直到?jīng)]有反序的數(shù)據(jù)元素為止
*/
function bubbleSort($array){
$count = count($array);
if ($count <= 0) {
return false;
}
for($i=0; $i<$count; $i++){
for($j=$count-1; $j>$i; $j--){
   if ($array[$j] < $array[$j-1]){ //比較找到的數(shù)進(jìn)行交換
    $tmp = $array[$j];
    $array[$j] = $array[$j-1];
    $array[$j-1] = $tmp;
   }
}
}
return $array;
}
  
/*
* 快速排序(一維數(shù)組)
*
*/
function quickSort($array){
if (count($array) <= 1){
return $array;
}
$key = $array[0];
$left_arr = array();
$right_arr = array();
for ($i=1; $i<count($array); $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);
}
/**
* 按照元素的值進(jìn)行排序
* 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)
{
//創(chuàng)建key的順序數(shù)組
for($key=0;$key<$count;$key++)
{
$arrKeyMap[$key] = $key;
}
//對(duì)值進(jìn)行排序
for($i=0;$i<$count;$i++)
{
for($j = $count-1; $j>$i;$j--)
{
//<從小到大排列 升降在這修改
$bol = $strOrder == 'asc' ? $arrVal[$j]<$arrVal[$j-1] : $arrVal[$j]>$arrVal[$j-1];
if($bol){
$tmp = $arrVal[$j];
$arrVal[$j] = $arrVal[$j-1];
$arrVal[$j-1] = $tmp;
//值的冒泡排序,引起key的數(shù)組的交互
$keytmp = $arrKeyMap[$j];
$arrKeyMap[$j] = $arrKeyMap[$j-1];
$arrKeyMap[$j-1] = $keytmp;
}
}
}
if(count($arrKeyMap))
{
foreach ($arrKeyMap as $val)
{
$arrReturn[] = $arrKey[$val];
}
}
return $arrReturn;
}
}
/**
* 使用原生的函數(shù)進(jìn)行數(shù)組按照值進(jìn)行排列
*/
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;
}

對(duì)于下面的2個(gè)對(duì)于array的值進(jìn)行排序的方法一個(gè)是自己實(shí)現(xiàn)的一個(gè)是使用了原生的PHP函數(shù)的,其實(shí)排序?qū)τ谏倭繑?shù)據(jù)一般就單頁(yè)的數(shù)據(jù)量的數(shù)據(jù)還是可以的,如果涉及到大量的數(shù)據(jù)的排序,建議可以整合到MYSQL的基礎(chǔ)類(lèi)中來(lái)進(jìn)行。

相關(guān)文章

  • Nginx服務(wù)器上安裝并配置PHPMyAdmin的教程

    Nginx服務(wù)器上安裝并配置PHPMyAdmin的教程

    這篇文章主要介紹了Nginx服務(wù)器上安裝并配置PHPMyAdmin的教程,附帶一條PHPMyAdmin加載慢的解決方法:)需要的朋友可以參考下
    2015-08-08
  • php 實(shí)現(xiàn)進(jìn)制相互轉(zhuǎn)換

    php 實(shí)現(xiàn)進(jìn)制相互轉(zhuǎn)換

    最近的項(xiàng)目中需要用到進(jìn)制轉(zhuǎn)換,這個(gè)問(wèn)題在剛剛接觸計(jì)算機(jī)理論時(shí)候,還是很會(huì)的,好久不用,居然模糊了……
    2016-04-04
  • php 數(shù)組的創(chuàng)建、調(diào)用和更新實(shí)現(xiàn)代碼

    php 數(shù)組的創(chuàng)建、調(diào)用和更新實(shí)現(xiàn)代碼

    對(duì)于php的數(shù)組是php中很重要的一個(gè)地方,大家一定要仔細(xì)看。
    2009-03-03
  • 深入理解PHP之require/include順序 推薦

    深入理解PHP之require/include順序 推薦

    在大型的Web項(xiàng)目中, include_path是一個(gè)模塊化設(shè)計(jì)的根本中的根本(當(dāng)然,現(xiàn)在也有很多基于autoload的設(shè)計(jì), 這個(gè)不影響本文的探討), 但是正是因?yàn)閕nclude_path, 經(jīng)常會(huì)讓我們遇到一些因?yàn)闆](méi)有找到正確的文件而導(dǎo)致的看似”詭異”的問(wèn)題.
    2011-01-01
  • php靜態(tài)文件生成類(lèi)實(shí)例分析

    php靜態(tài)文件生成類(lèi)實(shí)例分析

    這篇文章主要介紹了php靜態(tài)文件生成類(lèi),以實(shí)例形式較為詳細(xì)的分析了使用php生成靜態(tài)文件的方法及使用技巧,需要的朋友可以參考下
    2015-01-01
  • thinkphp框架實(shí)現(xiàn)刪除和批量刪除

    thinkphp框架實(shí)現(xiàn)刪除和批量刪除

    這篇文章主要為大家詳細(xì)介紹了thinkPHP框架實(shí)現(xiàn)刪除和批量刪除的相關(guān)資料,需要的朋友可以參考下
    2016-06-06
  • 解析使用ThinkPHP應(yīng)該掌握的調(diào)試手段

    解析使用ThinkPHP應(yīng)該掌握的調(diào)試手段

    本篇文章是對(duì)使用ThinkPHP應(yīng)該掌握的調(diào)試手段進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP SEO優(yōu)化之URL優(yōu)化方法

    PHP SEO優(yōu)化之URL優(yōu)化方法

    在處理地址URL時(shí),用這個(gè)函數(shù)可以輕松就把單詞用"-"連起來(lái)
    2011-04-04
  • PHP設(shè)計(jì)模式之適配器模式原理與用法分析

    PHP設(shè)計(jì)模式之適配器模式原理與用法分析

    這篇文章主要介紹了PHP設(shè)計(jì)模式之適配器模式,簡(jiǎn)單描述了適配器模式的概念、原理并結(jié)合實(shí)例形式分析了php類(lèi)適配器模式與對(duì)象適配器模式的具體定義與使用方法,需要的朋友可以參考下
    2018-04-04
  • 生成php程序的php代碼

    生成php程序的php代碼

    前臺(tái)程序不少情況下需要生成.php文件,諸如多用戶(hù)的在線日記程序、留言簿以及自助網(wǎng)站程序等等,都不可避免地在與用戶(hù)的交互中生成.php程序文件。一般的,所生成的.php文件內(nèi)容并不復(fù)雜,但麻雀雖小五臟俱全,完整的.php文件結(jié)構(gòu)必須得到保證。
    2008-04-04

最新評(píng)論

华宁县| 芦山县| 布拖县| 吐鲁番市| 尚志市| 忻州市| 南召县| 黑河市| 仲巴县| 莱芜市| 三都| 天全县| 清徐县| 石楼县| 林州市| 璧山县| 无极县| 正蓝旗| 普洱| 松桃| 莱西市| 安岳县| 江达县| 安康市| 荣昌县| 文安县| 南雄市| 威远县| 安国市| 临江市| 吉林市| 县级市| 伊宁市| 宁远县| 思南县| 城市| 吉隆县| 台南县| 壤塘县| 海盐县| 资源县|