注:为方便描述,下面的排序全为正序(从小到大排序)
假设有一个数组[a,b,c,d]
冒泡排序依次比较相邻的两个元素,如果前面的元素大于后面的元素,则两元素交换位置;否则,位置不变.具体步骤:
①.,比较a,b这两个元素,如果ab,则交换位置,数组变为:[b,a,c,d]
完成第一轮比较后,可以发现最大的数c已经排(冒)在最后面了,接着再进行第二轮比较,但第二轮比较不必比较最后一个元素了,因为最后一个元素已经是最大的了.
第二轮比较结束后,第二大的数也会冒到倒数第二的位置.
依次类推,再进行第三轮,,,
就这样最大的数一直往后排(冒),最后完成排序.所以我们称这种排序算法为冒泡排序.
选择排序是一种直观的算法,每一轮会选出列中最小的值,把最小值排到前面.具体步骤如下:
插入排序步骤大致如下:
步骤:
从数列中挑出一个元素,称为 "基准"(pivot),
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边).在这个分区退出之后,该基准就处于数列的中间位置.这个称为分区(partition)操作.
递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序.
①.、冒泡排序
function?bubble_sort($arr)?{
$n=count($arr);
for($i=0;$i$n-1;$i?){
for($j=$i?1;$j$n;$j?)?{
if($arr[$j]$arr[$i])?{
$temp=$arr[$i];
$arr[$i]=$arr[$j];
$arr[$j]=$temp;
}
return?$arr;
function?Merge($arr,?$left,?$mid,?$right)?{
$i?=?$left;
$j?=?$mid?1;
$k?=?0;
$temp?=?array();
while?($i?=?$mid?$j?=?$right)
{
if?($arr[$i]?=?$arr[$j])
$temp[$k?]?=?$arr[$i?];
else
$temp[$k?]?=?$arr[$j?];
while?($i?=?$mid)
while?($j?=?$right)
for?($i?=?$left,?$j?=?0;?$i?=?$right;?$i?,?$j?)
$arr[$i]?=?$temp[$j];
function?MergeSort($arr,?$left,?$right)
if?($left?$right)
MergeSort($arr,?$left,?$mid);
MergeSort($arr,?$mid?1,?$right);
Merge($arr,?$left,?$mid,?$right);
function?bin_search($arr,$low,$high,$value)?{
if($low$high)
return?false;
else?{
if($value==$arr[$mid])
return?$mid;
elseif($value$arr[$mid])
return?bin_search($arr,$low,$mid-1,$value);
return?bin_search($arr,$mid?1,$high,$value);
while($low=$high)?{
$high=$mid-1;
$low=$mid?1;
function?quick_sort($arr)?{
if($n=1)
$key=$arr[0];
$left_arr=array();
$right_arr=array();
for($i=1;$i$n;$i?)?{
if($arr[$i]=$key)
$left_arr[]=$arr[$i];
$right_arr[]=$arr[$i];
$left_arr=quick_sort($left_arr);
$right_arr=quick_sort($right_arr);
return?array_merge($left_arr,array($key),$right_arr);
function?select_sort($arr)?{
for($i=0;$i$n;$i?)?{
$k=$i;
if($arr[$j]$arr[$k])
$k=$j;
if($k!=$i)?{
$arr[$i]=$arr[$k];
$arr[$k]=$temp;
function?insertSort($arr)?{
$tmp=$arr[$i];
$j=$i-1;
while($arr[$j]$tmp)?{
$arr[$j?1]=$arr[$j];
$arr[$j]=$tmp;
$j--;
if($j0)
break;
在php数组排序中我们通常会用到下列几个函数.
sort() ------ 以升序对数组排序,是以元素值来排序的
rsort() ----- 以降序对数组排序,以元素值来排序.
asort() ----- 根据值,以升序对关联数组进行排序
ksort() ----- 根据键,以升序对关联数组进行排序
arsort() ---- 根据值,以降序对关联数组进行排序
krsort() ---- 根据键,以降序对关联数组进行排序
array_multisort()----对多个数组或多维数组进行排序
用sort函数来做下示例吧
php
$string=array("Yes","True","False");
sort($string);
print_r($string);
再来看一个array_multisort的例子了,
$att[] = array('name' = 'dog', 'number' = 1);
array_multisort($att,SORT_DESC,SORT_REGULAR);
print_r($att);
输出结果为:
Array (
[1] = Array ( [name] = dog [number] = 1 )
)
不用数组的来个例子了.
for($i=0;$icount($att);$i++){
foreach($att as $key=$val){
if($att[$i]['number']$val['number']){
$att[$key]=$att[$i];
$att[$i]=$val;
结果:
当然还有更多的方法,如插入排序,选择排序,冒泡排序,快速排序等.这些网站有很多的,如这个网站上就有:至于数组和字符串的话,主要有str_split()、explode(),preg_split()三个函数.当然还有别的方法,上面那个网我站有说到,你可以自己去找一找了.
下面给你介绍四种排序方法:
①.) 插入排序(Insertion Sort)的基本思想是:?
每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止.实现代码如下:
每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕.实现代码如下:
两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止.实现代码如下:
以上就是土嘎嘎小编为大家整理的php版本常用的排序算法汇总相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!