当前位置:首页 > PHP教程 > php应用 > 列表

php三种常用的排序算法

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-02 14:31:18 浏览: 评论:0 

php三种常用的排序算法

1、冒泡排序,稳定排序

个人理解:冒泡排序就是两个循环,大循环套小循环,从头或者尾部开始比较连续的两个元素的大小,如果不符合自己的排序标准,由小到大,或由大到小,则交换其值.

  1. <?php 
  2. $arr=array(10,15,16,18,20,3,9,7,18,99); 
  3. for($i=1;$i<=9;$i++) 
  4.    for($j=1;$j<=10-$i;$j++) 
  5.       if($arr[$j-1]>$arr[$j]) 
  6.       {$temp=$arr[$j-1];$arr[$j-1]=$arr[$j];$arr[$j]=$temp;} 
  7.       echo"after sorted:"
  8.    for($i=0;$i<=9;$i++) 
  9.       echo $arr[$i].","
  10.        
  11. ?> 

方法二

  1. function bubble_sort($array){ 
  2.  
  3.   $count=count($array); 
  4.  
  5.   for($i=0;$i<$count;$i++){ 
  6.  
  7.     for($j=$count-1;$j>$i;$j--){ 
  8.  
  9.       if($array[$j]<$array[$j-1]){//如果后面的值小于前面的元素,则交换值 
  10.  
  11.         $temp=$array[$j]; 
  12.  
  13.         $array[$j]=$array[$j-1]; 
  14.  
  15.         $array[$j-1]=$temp
  16.  
  17.       } 
  18.  
  19.     } 
  20.  
  21.   } 
  22.  

2、快速排序,又称数组排序,不稳定排序.

个人理解:在要排序的数组中找一个关键数据(标准值),通常把数组的第一个元素当成关键数据,然后循环数组,从第二个元素开始依次将元素值与关键数据进行比较,如果小于关键数据,就把该元素放在关键值左边,如果答应关键数据,就把该元素放在关键数据右边,将关键值左边元素存成数组,右边元素也存成数组,再分别进行以上排序,得到的数组与关键数据合并数组后就排序成功:

  1. function quick_sort($array){ 
  2.  
  3.   $count=count($array); 
  4.  
  5.   if($count<=1) retrun $array;  //如果数组只有一个元素或为空,则直接返回数组,不用排序了 
  6.  
  7.   $key=$array[0]; //将数组第一个元素设置为关键数据 
  8.  
  9.   $left_arr=array(); 
  10.  
  11.   $right_ar=array(); 
  12.  
  13.   for($i=1;$i<$count;$i++){ 
  14.  
  15.     if($array[$i]<=$key
  16.  
  17.       $left_arr[]=$array[$i]; 
  18.  
  19.     else 
  20.  
  21.       $right_arr[]=$array[$i]; 
  22.  
  23.   } 
  24.  
  25.   $left_arr=quick_sort($left_arr); 
  26.  
  27.   $right_arr=quick_sort($right_arr); 
  28.  
  29.   //返回合并后的数组 
  30.  
  31.   return array_merge($left_arr,array($key),$right_arr); 
  32.  

3、选择排序,不稳定排序

个人理解:选择排序就是在要排序的数组中选出最小值与第一个元素交换值,然后再剩下的元素中选出最小值与第二个元素交换值,如此循环到倒数第二个元素和最后一个元素比较为止.

  1. function select_sort($array){ 
  2.  
  3.   $count=count($array); 
  4.  
  5.   if($count<=1) return $array
  6.  
  7.   for($i=0;$i<$count-1;$i++){ 
  8.  
  9.     $min=$array[$i]; //假设当前元素为数最小,比较后再调整 
  10.  
  11.     for($j=$i+1;$j<$count;$j++){ 
  12.  
  13.       if($array[$j]<$min){ 
  14.  
  15.         $min=$array[$j]; 
  16.  
  17.         $key=$j//将此时值最小的元素的键名记下, 
  18.  
  19.       } 
  20.  
  21.     } 
  22.  
  23.     if($min!=$array[$i]){ //如果min在循环中改变了,就需要交换数据 
  24.  
  25.       $temp=$array[$i]; 
  26.  
  27.       $array[$i]=$array[$key]; 
  28.  
  29.       $array[$key]=$temp
  30.  
  31.     } 
  32.  
  33.   } 
  34.  

Tags: php算法 排序算法

分享到: