冒泡,选择,插入,快速四种排序方法——PHP

冒泡排序:通过对待排序序列从后向前依次比较,把最大/最小的数排到最后

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);
        } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值