php三种常用的排序算法
1、冒泡排序,稳定排序
个人理解:冒泡排序就是两个循环,大循环套小循环,从头或者尾部开始比较连续的两个元素的大小,如果不符合自己的排序标准,由小到大,或由大到小,则交换其值.
- <?php
- $arr=array(10,15,16,18,20,3,9,7,18,99);
- for($i=1;$i<=9;$i++)
- for($j=1;$j<=10-$i;$j++)
- if($arr[$j-1]>$arr[$j])
- {$temp=$arr[$j-1];$arr[$j-1]=$arr[$j];$arr[$j]=$temp;}
- echo"after sorted:";
- for($i=0;$i<=9;$i++)
- echo $arr[$i].",";
-
- ?>
方法二
- function bubble_sort($array){
-
- $count=count($array);
-
- for($i=0;$i<$count;$i++){
-
- for($j=$count-1;$j>$i;$j--){
-
- if($array[$j]<$array[$j-1]){
-
- $temp=$array[$j];
-
- $array[$j]=$array[$j-1];
-
- $array[$j-1]=$temp;
-
- }
-
- }
-
- }
-
- }
2、快速排序,又称数组排序,不稳定排序.
个人理解:在要排序的数组中找一个关键数据(标准值),通常把数组的第一个元素当成关键数据,然后循环数组,从第二个元素开始依次将元素值与关键数据进行比较,如果小于关键数据,就把该元素放在关键值左边,如果答应关键数据,就把该元素放在关键数据右边,将关键值左边元素存成数组,右边元素也存成数组,再分别进行以上排序,得到的数组与关键数据合并数组后就排序成功:
- function quick_sort($array){
-
- $count=count($array);
-
- if($count<=1) retrun $array;
-
- $key=$array[0];
-
- $left_arr=array();
-
- $right_ar=array();
-
- for($i=1;$i<$count;$i++){
-
- if($array[$i]<=$key)
-
- $left_arr[]=$array[$i];
-
- else
-
- $right_arr[]=$array[$i];
-
- }
-
- $left_arr=quick_sort($left_arr);
-
- $right_arr=quick_sort($right_arr);
-
-
-
- return array_merge($left_arr,array($key),$right_arr);
-
- }
3、选择排序,不稳定排序
个人理解:选择排序就是在要排序的数组中选出最小值与第一个元素交换值,然后再剩下的元素中选出最小值与第二个元素交换值,如此循环到倒数第二个元素和最后一个元素比较为止.
- function select_sort($array){
-
- $count=count($array);
-
- if($count<=1) return $array;
-
- for($i=0;$i<$count-1;$i++){
-
- $min=$array[$i];
-
- for($j=$i+1;$j<$count;$j++){
-
- if($array[$j]<$min){
-
- $min=$array[$j];
-
- $key=$j;
-
- }
-
- }
-
- if($min!=$array[$i]){
-
- $temp=$array[$i];
-
- $array[$i]=$array[$key];
-
- $array[$key]=$temp;
-
- }
-
- }
-
- }
|