快速排序 /数组快速排序 先取出数组第一个 把每个和它比较,比它小的放在l数组,大的放r数组,一直比较,最后合到一个数组 /*function kuaisu($a){ $c=count($a); if($c<=1){ return $a; } $l=$r=array(); for($i=1;$i<$c;$i++){ if($a[$i]<$a[0]){ $l[]=$a[$i]; }else{ $r[]=$a[$i]; } } $l=kuaisu($l); $r=kuaisu($r); return array_merge($l,array($a[0]),$r); } $m=array(1,7,3,2,5,0); //echo kuaisu($m); print_r(kuaisu($m)) ;*/
插入排序 先找一个数进行比较,如果前一个比后一个大 ,调换位置
function charu($a){ $c = count($a); for($i=1;$i<$c;$i++){ $t = $a[$i]; for($j=$i;$j>0 && $a[$j-1]>$t;$j--){ $a[$j] = $a[$j-1]; } $a[$j] = $t; } return $a; } $m=array(1,7,3,2); print_r(charu($m)); 或者function charu($a){ $c = count($a); for($i=1;$i<$c;$i++){ $t = $a[$i]; for($j=$i;$j>0;$j--){ if($a[$j-1]>$t){ $a[$j] = $a[$j-1]; $a[$j-1] = $t; } } //$a[$j] = $t; } return $a; }
选择排序//选择排序 第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推 /*初始序列:{ 49 27 65 97 76 12 38 } 第1趟:12与49交换:12 { 27 65 97 76 49 38 } 第2趟:27不动 :12 27 { 65 97 76 49 38 } 第3趟:65与38交换:12 27 38 { 97 76 65 49} 第4趟:97与49交换:12 27 38 49 { 97 76 65 } 第5趟:76与65交换:12 27 38 49 65 { 97 76 } 第6趟:97与76交换:12 27 38 49 65 76 97 完成*/ /*function xuanze($a){ $c = count($a); for($i=0;$i<$c;$i++){ for ($j=$i+1;$j<$c;$j++){ if($a[$i]>$a[$j]){ $t = $a[$j]; $a[$j] = $a[$i]; $a[$i] = $t; } } } return $a; } $m=array(1,7,3,2); print_r(xuanze($m));
冒泡 从后往前
比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 [1function maopao($a){ $c = count($a); for($i=0;$i<$c;$i++){ for ($j=$c-1;$j>$i;$j--){ if($a[$j]<$a[$j-1]){ $t = $a[$j-1]; $a[$j-1] = $a[$j]; $a[$j] = $t; } } } return $a; }