关于常用到的几个排序,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
<?php
$arr  array (20,4,2,-1,-34,0,50,6,19);
#冒泡排序
function  bubbleSort( $arr ){
$flag  = 0;
for ( $i =0; $i < count ( $arr )-1; $i ++){
for ( $j =0; $j < count ( $arr )-1- $i ; $j ++){
if ( $arr [ $j ] >  $arr [ $j +1]){
$temp  $arr [ $j +1];
$arr [ $j +1] =  $arr [ $j ];
$arr [ $j ] =  $temp ;
$flag  = 1;
}
}
//优化
if (! $flag ){
//已经有序
break ;
}
$flag =0;
}
return  $arr ;
}
echo  implode( ',' ,bubbleSort( $arr )). '<br>' ;
#选择排序
function  selectSort( $arr ){
for ( $i =0; $i < count ( $arr )-1; $i ++){
//假设$i就是最小的
$minVal  $arr [ $i ];
//$i是最小的下标
$minIndex  $i ;
for ( $j = $i +1; $j < count ( $arr ); $j ++){
//假设错误
if ( $minVal  $arr [ $j ]){
$minVal  $arr [ $j ];
$minIndex  $j ;
}
}
//最后交换
$temp  $arr [ $i ];
$arr [ $i ] =  $arr [ $minIndex ];
$arr [ $minIndex ] =  $temp ;
}
return  $arr ;
}
echo  implode( ',' ,selectSort( $arr )). '<br>' ;
#插入排序
function  insertSort( $arr ){
//先默认下标为0的已经是有序的
for ( $i =1; $i < count ( $arr ); $i ++){
//准备插入的数据
$insertVal  $arr [ $i ];
//待比较的下标,也就是前面的
$insertIndex  $i -1;
//如果满足下面条件,说明位置还未找到
while ( $insertIndex >=0&& $insertVal < $arr [ $insertIndex ]){
//同时把数后面移动一下
$arr [ $insertIndex +1] =  $arr [ $insertIndex ];
$insertIndex --;
}
//插入
$arr [ $insertIndex +1] =  $insertVal ;
}
return  $arr ;
}
echo  implode( ',' ,insertSort( $arr )). '<br>' ;
#快速排序(递归)
function  quickSort( $left , $right ,& $arr ){
$l  $left ;
$r  $right ;
$pivot  $arr [( $left + $right )/2];
$temp =0;
while ( $l < $r ){
while ( $arr [ $l ]< $pivot ) $l ++;
while ( $arr [ $r ]> $pivot ) $r --;
if ( $l >= $r break ;
$temp = $arr [ $l ];
$arr [ $l ]= $arr [ $r ];
$arr [ $r ]= $temp ;
if ( $arr [ $l ]== $pivot )-- $r ;
if ( $arr [ $r ]== $pivot )++ $l ;
}
if ( $l == $r ){
$l ++;
$r --;
}
if ( $left < $r ) quickSort( $left , $r , $arr );
if ( $right > $l )quickSort( $l , $right , $arr );
//return $arr;
}
quickSort(0, count ( $arr )-1, $arr );
echo  implode( ',' , $arr ). '<br>' ;
#二分查找
function  binarySearch(& $arr , $findVal , $l , $r ){
//停止条件
if ( $l > $r ){
return ;
}
//找到中间的下标
$midIndex  round (( $r + $l )/2);
if ( $findVal > $arr [ $midIndex ]){
binarySearch( $arr , $findVal , $midIndex +1, $r );
} elseif ( $findVal < $arr [ $midIndex ]){
binarySearch( $arr , $findVal , $l , $midIndex -1);
} else {
echo  $midIndex ;
}
}
binarySearch( $arr ,0,0, count ( $arr )-1);

都已经亲自测试过,可以正常运行!

 

 















本文转自shayang8851CTO博客,原文链接:http://blog.51cto.com/janephp/1287597,如需转载请自行联系原作者

相关文章
原生php实现列表接口+分页接口+排序接口组合使用+包括测试数据(不加任何封装)
原生php实现列表接口+分页接口+排序接口组合使用+包括测试数据(不加任何封装)
原生php实现列表接口+分页接口+排序接口组合使用+包括测试数据(不加任何封装)
|
3月前
|
SQL PHP 数据库
|
11月前
|
PHP
php数组随机排序
PHP中对数据进行随机排序
|
1月前
|
存储 PHP 索引
|
8月前
|
算法 小程序 PHP
PHP实现递归排序
在leetcode练习算法的时候,发现一个算法需要用到递归。 递归是个好东西,但是吧,一般不理解其精髓的,很难写出一个好的递归。 递归其实就是函数本身直接或者间接地调用自身的一种编程方法(我自己调用我自己~),也可以理解为有反复执行过程的一种方法,这个就与循环非常相似,但是递归调用的函数中必须要有终止条件,也就是一定
42 1
|
JSON PHP 数据格式
php清洗数据实战案例(2):根据键值进行二维数据的对象数组的排序
php清洗数据实战案例(2):根据键值进行二维数据的对象数组的排序
70 0
PHP 多维数组排序
PHP 多维数组排序
|
PHP
php实现数字格式化,数字每三位加逗号的功能函数169856420=&gt;169,856,420
php实现数字格式化,数字每三位加逗号的功能函数169856420=&gt;169,856,420
200 0
|
PHP
PHP实现Workerman实例 高性能PHP Socket即时通讯框架
PHP实现Workerman实例 高性能PHP Socket即时通讯框架
390 0
|
消息中间件 PHP Windows
PHP实现php-amqplib/php-amqplib实例RabbitMq
PHP实现php-amqplib/php-amqplib实例RabbitMq
205 0