PHP排序算法的复习和总结_php教程-查字典教程网
PHP排序算法的复习和总结
PHP排序算法的复习和总结
发布时间:2016-12-29 来源:查字典编辑
摘要:直接上代码吧!复制代码代码如下:

直接上代码吧!

复制代码 代码如下:

<?php

/*

* 插入排序(一维数组)

* 每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当的位置,使数列依然有序;直到待排序的数据元素全部插入完成为止。

*/

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]; //获取后一个元素的值

$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<$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;

}

/*

* 冒泡排序(一维数组)

* 两两比较待排序数据元素的大小,发现两个数据元素的次序相反即进行交换,直到没有反序的数据元素为止

*/

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]){ //比较找到的数进行交换

$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<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);

}

/**

* 按照元素的值进行排序

* 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<$count;$key++)

{

$arrKeyMap[$key] = $key;

}

//对值进行排序

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的数组的交互

$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的基础类中来进行。

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新php教程学习
    热门php教程学习
    编程开发子分类