php数据结构课程---6、常见排序有哪些
一、总结
一句话总结:
冒泡排序(Bubble sort):依次交换
选择排序 ( Selection Sort ):在未排序序列中找到最小(大)元素,依次存放到已排序序列中
插入排序(Insertion sort):将未排序数据插入到已排序的序列之中
快速排序 ( Quick sort ):分治:简单写法:用数组
1、排序算法的稳定性是什么?
稳定的话:就是相同值,该在前,还是在前
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,Ai=Aj,且Ai在Aj之前,而在排序后的序列中,Ai仍在Aj之前,则称这种排序算法是稳定的;否则称为不稳定的。
2、快排的简便写法?
用数组:那空间换时间:将比基数小的扔进一个数组,将比基数大的扔进另外一个数组
3、将算法代码书写变的简单的思路(比如简便写快排)?
用数组:用数组存储中间变量,简化代码书写的复杂度
二、内容在总结中
<?php class Sort{ //冒泡排序(Bubble sort):依次交换 public static function bubble($arr){ $size = count($arr); for ($i=0; $i < $size ; $i++) { //第一次肯定把最大的移到最后,所以$j<$size-1-$i for ($j=0; $j < $size-1-$i ; $j++) { if($arr[$j]>$arr[$j+1]){ $tmp = $arr[$j]; $arr[$j]=$arr[$j+1]; $arr[$j+1]=$tmp; } } } return $arr; } //选择排序 ( Selection Sort ):在未排序序列中找到最小(大)元素,依次存放到已排序序列中 public static function select($array){ $count=count($array); for($i=0;$i<$count-1;$i++){ /*findtheminest*/ $min=$i; // echo'$min-->'.$array[$min].'-->'; for($j=$i+1;$j<$count;$j++){ //由小到大排列 if($array[$min]>$array[$j]){ //表明当前最小的还比当前的元素大 $min=$j; //赋值新的最小的 } } // echo$array[$min].'coco<br/>'; /*swap$array[$i]and$array[$min]即将当前内循环的最小元素放在$i位置上*/ if($min!=$i){ $temp=$array[$min]; $array[$min]=$array[$i]; $array[$i]=$temp; } } return $array; } //插入排序(Insertion sort):将未排序数据插入到已排序的序列之中 public static function insert($arr){ $size = count($arr); for ($i=0; $i <$size-1 ; $i++) { for ($j=$i+1; $j >0 ; $j--) { if($arr[$j]<$arr[$j-1]){ $tmp=$arr[$j]; $arr[$j]=$arr[$j-1]; $arr[$j-1]=$tmp; } } } return $arr; } //快速排序 ( Quick sort ):分治:简单写法:用数组 public static function quick($arr){ if(count($arr)<=1){ return $arr; } $k=$arr[0]; $x=array(); $y=array(); $_size=count($arr); for($i=1;$i<$_size;$i++){ if($arr[$i]<=$k){ $x[]=$arr[$i]; }elseif($arr[$i]>$k){ $y[]=$arr[$i]; } } $x=Sort::quick($x); $y=Sort::quick($y); return array_merge($x,array($k),$y); } } $arr = [9,4,6,8,17,12,44,12,56,71,21,19,81,99]; echo "<pre>"; // print_r(Sort::bubble($arr)); // print_r(Sort::select($arr)); // print_r(Sort::insert($arr)); // print_r(Sort::quick($arr));