php排序

来源:互联网 发布:阿里云没有公网ip 编辑:程序博客网 时间:2024/06/17 23:14
<?php

class Mopao{

 //权限修饰符
    //public 公共的 类内 类外 继承 都可调用
    //private  私有的  只可以类内调用
    //protected  受保护的  父类和子类 可以调用



    public function bubbleSort($arr){
        $count = count($arr);
        //数组中的元素是否小于1,如果小于返回数组
        if($count<=1) return $arr;

        $side = $arr[0];
        //定义两个数组
        $right = [];
        $lift = [];
        for($i=1;$i<$count;$i++){
            if($arr[$i]<$side){
                $lift[] = $arr[$i];
            }else{
                $right[] = $arr[$i];
            }
        }
        //使用递归
        $right = $this->bubbleSort($right);
        $lift = $this->bubbleSort($lift);
        //合并两个数组
        return array_merge($lift,[$side],$right);
        

    }
    
    //冒泡排序
    //数组中相邻的两个数 依次比较大小 如果符合我们的条件则不变 不符合条件的调换两个数的位置
    
    /*
    @content 冒泡排序
    @params  $arr array 需要排序的无序数组
    @return  $arr array 排好序的有序数组
     */
    
    public function BubbleSort($arr)
    {
        $len = count($arr);
        //控制循环的层数
        for ($i=1;$i<$len;$i++) {
            //控制比较的次数
            for ($j=0;$j<$len-$i;$j++) {
                if ($arr[$j] > $arr[$j+1]) {
                    list($arr[$j],$arr[$j+1]) = [$arr[$j+1],$arr[$j]];
                }
            }
        }

        return $arr;
    }


    /*
    @content 快速排序
    @params  $arr array 需要排序的无序数组
    @return  $arr array 排好序的有序数组
     */
    
    public function QuickSort($arr)
    {
        $len = count($arr);
        if ($len <=1) {
            return $arr;
        }
        //定义我们的标杆
        $base = $arr[0];
        $big = [];
        $small = [];
        for ($i=1;$i<$len;$i++) {
            if ($arr[$i] > $base) {
                $big[] = $arr[$i];
            } else {
                $small[] = $arr[$i];
            }
        }
        $left = $this->QuickSort($small);
        $right = $this->QuickSort($big);
        $arr = array_merge($left,[$base],$right);

        return $arr;
    }


    /*
    @content 获取不重复的三位数
    @params  $arr array 长度为5的不重复索引数组
    @returnn $data array  所有符合条件的数的集合
     */
    public function GetNum($arr)
    {
        $len = count($arr);
        $data = [];
        for ($i=0;$i<$len;$i++) {
            if ($arr[$i] ==0) continue;
            for ($j=0; $j < $len; $j++) {
                for ($k=0; $k < $len ; $k++) {
                    if ($arr[$i] !=$arr[$j] && $arr[$i] != $arr[$k] && $arr[$j] != $arr[$k]) {
                        $data[] = $arr[$i].$arr[$j].$arr[$k];
                    }
                }
            }
        }

        return $data;
    }
    
    /*
    @content 选择排序
    @params  $arr array  无序索引数组
    @returnn $data array  排好序的有序数组
     */
    public function SelectSort($arr)
    {
        $len = count($arr);
        for ($i=0;$i<$len-1;$i++) {
            //我们认为的最小值的位置
            $min = $i;
            for ($j=$i+1;$j<$len;$j++) {
                if ($arr[$min] > $arr[$j]) {
                    $min = $j;
                }
            }
            if($min != $i) {
                list($arr[$min],$arr[$i]) = [$arr[$i],$arr[$min]];
            }

        }

        return $arr;
    }

/*
    @content 插入排序
    @params  $arr array      有序数组插入一个新元素后的结果
    @returnn $arr array  排好序的有序数组
     */

    public function InsertSort($arr)
    {
        $len = count($arr);

        for ($i=1;$i<$len;$i++) {
            for ($j=$i-1;$j>=0;$j--) {
                if ($arr[$j] > $arr[$j+1]) {
                    list($arr[$j+1],$arr[$j]) = [$arr[$j],$arr[$j+1]];
                } else {
                    break;
                }
            }
        }

        return $arr;
    }

    
}
//实例化
$obj = new Mopao;
//打乱的数组
$arr = array(1,121212,3,2,5,99,4,9,7);
//调用方法
$info = $obj->bubbleSort($arr);
echo "<pre>";
print_r($info);exit;