PHP排序算法的复习和总结,php排序算法_PHP教程
Jul 12, 2016 am 08:58 AMPHP排序算法的复习和总结,php排序算法
对于PHP中对数组的元素进行排序,这个是很经常用到的,之前的项目中也有,而且对于几种排序我们都是用的是asort arsort 等PHP原生函数,没有自己去实现,所以就对一下的几个函数进行总结,这个会不断的进行补充,自己也可以好好的复习和总结。
直接上代码吧!
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
<?php
/*
* 插入排序(一维数组)
* 每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当的位置,使数列依然有序;直到待排序的数据元素全部插入完成为止。
*/
function insertSort( $arr ){
if (! is_array ( $arr ) || <code class="php functions">count( $arr )==0){
<code class="php spaces"> return $arr ;
}
<code class="php variable">$count = <code class="php functions">count( $arr );
for ( $i =1; $i <code class="php variable">$count ; $i ++){
<code class="php spaces"> if (isset( $arr [ $i ])){
$tmp = $arr [ $i ]; //获取后一个元素的值
$j = $i - 1; //获取前面的下标
while ( $arr [ $j ] > $tmp ){ //如果前面一个比后面一个大, 这里是从小到大
$arr [ $j +1] = $arr [ $j ]; //把小的元素和前面的对换,直到移动到合适的位置,在移动下一个
$arr [ $j ] = $tmp ;
$j --;
}
<code class="php spaces"> }
}
return $arr ;
}
/*
* 选择排序(一维数组)
* 每一趟从待排序的数据元素中选出最小(最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
*/
function selectSort( $arr ){
if (! is_array ( $arr ) || <code class="php functions">count( $arr ) == 0)
{
<code class="php spaces"> return $arr ;
}
<code class="php variable">$count = <code class="php functions">count( $arr );
for ( $i =0; $i <code class="php variable">$count ; $i ++){
<code class="php spaces"> $k = $i ;
<code class="php spaces"> for ( $j = $i +1; $j <code class="php variable">$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 ){
<code class="php variable">$count = <code class="php functions">count( $array );
if ( <code class="php variable">$count
<code class="php spaces"> return false;
}
for ( $i =0; $i <code class="php variable">$count ; $i ++){
<code class="php spaces"> for ( $j = <code class="php variable">$count-1; $j > $i ; $j --){
<code class="php spaces"> if ( $array [ $j ] <code class="php variable">$array [ $j -1]){ //比较找到的数进行交换
<code class="php spaces"> $tmp = $array [ $j ];
<code class="php spaces"> $array [ $j ] = $array [ $j -1];
<code class="php spaces"> $array [ $j -1] = $tmp ;
<code class="php spaces"> }
<code class="php spaces"> }
}
return $array ;
}
/*
* 快速排序(一维数组)
*
*/
function quickSort( $array ){
if ( <code class="php functions">count( $array )
<code class="php spaces"> return $array ;
}
$key = $array [0];
$left_arr = array ();
$right_arr = array ();
for ( $i =1; $i <code class="php functions">count ( $array ); $i ++){
if ( $array [ $i ] <code class="php variable">$key ){
<code class="php spaces"> $left_arr [] = $array [ $i ];
} else {
<code class="php spaces"> $right_arr [] = $array [ $i ];
<code class="php spaces"> }
}
$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 ) || <code class="php functions">count( $arr )==0)
{
<code class="php spaces"> return $arr ;
}
$arrReturn = array ();
foreach ( $arr as $key => $val )
{
<code class="php spaces"> $arrKey [] = $key ;
<code class="php spaces"> $arrVal [] = $val ;
}
<code class="php variable">$count = <code class="php functions">count( $arrVal );
if ( <code class="php variable">$count)
{
<code class="php spaces"> //创建key的顺序数组
<code class="php spaces"> for ( $key =0; $key <code class="php variable">$count ; $key ++)
<code class="php spaces"> {
<code class="php spaces"> $arrKeyMap [ $key ] = $key ;
<code class="php spaces"> }
<code class="php spaces"> //对值进行排序
<code class="php spaces"> for ( $i =0; $i <code class="php variable">$count ; $i ++)
<code class="php spaces"> {
<code class="php spaces">
<code class="php spaces"> for ( $j = <code class="php variable">$count-1; $j > $i ; $j --)
<code class="php spaces"> {
<code class="php spaces"> //
<code class="php spaces"> $bol = $strOrder == 'asc' ? $arrVal [ $j ]<code class="php variable">$arrVal [ $j -1] : $arrVal [ $j ]> $arrVal [ $j -1];
<code class="php spaces"> if ( $bol ){
<code class="php spaces"> $tmp = $arrVal [ $j ];
<code class="php spaces"> $arrVal [ $j ] = $arrVal [ $j -1];
<code class="php spaces"> $arrVal [ $j -1] = $tmp ;
<code class="php spaces"> //值的冒泡排序,引起key的数组的交互
<code class="php spaces"> $keytmp = $arrKeyMap [ $j ];
<code class="php spaces"> $arrKeyMap [ $j ] = $arrKeyMap [ $j -1];
<code class="php spaces"> $arrKeyMap [ $j -1] = $keytmp ;
<code class="php spaces"> }
<code class="php spaces"> }
<code class="php spaces"> }
<code class="php spaces"> if ( <code class="php functions">count( $arrKeyMap ))
<code class="php spaces"> {
<code class="php spaces"> foreach ( $arrKeyMap as $val )
<code class="php spaces"> {
<code class="php spaces"> $arrReturn [] = $arrKey [ $val ];
<code class="php spaces"> }
<code class="php spaces"> }
<code class="php spaces"> return $arrReturn ;
}
}
/**
* 使用原生的函数进行数组按照值进行排列
*/
function arraySortByVal( $arr , $keys , $type = 'asc' ){
$keysvalue = $new_array = array ();
foreach ( $arr as $k => $v ){
<code class="php spaces"> $keysvalue [ $k ] = $v [ $keys ];
}
if ( $type == 'asc' ){
<code class="php spaces"> asort( $keysvalue );
} else {
<code class="php spaces"> arsort( $keysvalue );
}
reset( $keysvalue );
foreach ( $keysvalue as $k => $v ){
<code class="php spaces"> $new_array [ $k ] = $arr [ $k ];
}
return $new_array ;
}
|
对于下面的2个对于array的值进行排序的方法一个是自己实现的一个是使用了原生的PHP函数的,其实排序对于少量数据一般就单页的数据量的数据还是可以的,如果涉及到大量的数据的排序,建议可以整合到MYSQL的基础类中来进行。
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

인기 기사
Repo : 팀원을 부활시키는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
헬로 키티 아일랜드 어드벤처 : 거대한 씨앗을 얻는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
스플릿 소설을이기는 데 얼마나 걸립니까?
3 몇 주 전
By DDD

인기 기사
Repo : 팀원을 부활시키는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
헬로 키티 아일랜드 어드벤처 : 거대한 씨앗을 얻는 방법
3 몇 주 전
By 尊渡假赌尊渡假赌尊渡假赌
스플릿 소설을이기는 데 얼마나 걸립니까?
3 몇 주 전
By DDD

뜨거운 기사 태그

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제
Gmail 이메일의 로그인 입구는 어디에 있나요?
7302
9


자바 튜토리얼
1622
14


Cakephp 튜토리얼
1342
46


라라벨 튜토리얼
1259
25


PHP 튜토리얼
1207
29



Laravel Back End : Part 2, React가있는 React 앱 구축

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법
