• php数据结构课程---6、常见排序有哪些


    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));
     
  • 相关阅读:
    UltraEdit 注册机使用说明
    sybase 收集常用sql语句
    过渡模式
    JavaScript 钩子
    自定义过渡的类名
    CSS过渡、CSS动画
    单元素/组件的过渡
    通过 v-once 创建低开销的静态组件
    内联模板、X-Template
    程序化的时间侦听器
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/10922814.html
Copyright © 2020-2023  润新知