冒泡排序:通过对待排序序列从后向前依次比较,把最大/最小的数排到最后
function bubble_arr(&$arr){
$c_arr = count($arr);
$num=0;
for($i=0;$i<$c_arr-1;$i++){
for($j=0;$j<$c_arr-1-$j;$j++){//这里$J的原因是因为进行一个大循环之后一个最小数就排好了
if($arr[$j]>$arr[$j+1]){
global $num;
$num = $arr[$j+1];
$arr[$j+1] = $arr[$j];
$arr[$j] = $num;
}
}
}
}
插入排序:把n个待排序的元素看为一个有序表,一个无序表,最开始,有序表中有一个元素,无序表中包含n-个元素,然后依次插入
function insert_arr(&$arr){
$temp = 0;
for($i=1;$i<count($arr);$i++){//先默认下标为0的数是有序的
$insertVal = $arr[$i];//val是准备插入的数
$insertIndex = $i-1;//准备哪一个和index数先比较
while($insertIndex>=0 && $insertVal<$arr[$insertIndex]){
$arr[$insertIndex+1]=$arr[$insertIndex];
//把数往后移动一下!!!!!!!,但是后移的数被保存到val中,所以不必担心数字丢失
$insertIndex--;
}
//插入,给这个val找到适当的位置
if($insertIndex+1!=$i){
$arr[$insertIndex+1]=$insertVal;
}
}
}
选择排序:第一次选择一个最小的值,与第一个交换,第二次与第二个交换
function select_arr(&$arr){
$temp=0;
for($i=0;$i<count($arr)-1;$i++){
$minVal = $arr[$i];//假设i就是最小值
$minIndex = $i;//记录我认为的最小值的小标
for($j=$i+1;$j<count($arr);$j++){
if($minVal>$arr[$j]){
$minVal=$arr[$j];
$minIndex = $j;
}
}
$temp = $arr[$i];
$arr[$i]=$arr[$minIndex];
$arr[$minIndex]=$temp;
}
}
快速排序法:
function quickSort($left,$right,&$array){
$l = $left;
$r = $right;
$pivot = $array[($left+$right)/2];
$temp = 0;
while($l<$r){
while($array[$l]<$pivot)$l++;
while($array[$r]>$pivot)$r--;
if($l>=$r)break;
$temp = $array[$l];
$array[$l]=$array[$r];
$array[$r]=$temp;
if($array[$l]==$pivot)--$r;
if($array[$r]==$pivot)++$l;
}
if($l==$r){
$l++;
$r--;
}
if($left<$r) quickSort($left,$r,$array);
if($right>$l) quickSort($l,$right,$array);
}
quickSort(0,count($myarr)-1,$myarr);
随机产生两万个数,可以使用这个可以对四种方法进行验证
for($i=0;$i<20000;$i++){
$myarr[$i] = rand(0,3000);
}