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

该博客围绕PHP数据结构课程中的常见排序算法展开。介绍了冒泡、选择、插入、快速排序的原理,还提及排序算法的稳定性概念,即相同值排序前后相对次序不变为稳定。此外,给出快排简便写法,用数组存储中间变量以简化代码。

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));

 

 

 

 

转载于:https://www.cnblogs.com/Renyi-Fan/p/10922814.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值