资讯专栏INFORMATION COLUMN

php插入排序,快速排序,归并排序,堆排序

JerryZou / 371人阅读

摘要:的陣列視為基本型別,所以必須用傳參考才能修改原陣列插入排序快速排序归并排序堆排序获取个数处理一半的数据

function bubble_sort(&$arr) {//php的陣列視為基本型別,所以必須用傳參考才能修改原陣列
    for ($i = 0; $i < count($arr) - 1; $i++)
        for ($j = 0; $j < count($arr) - 1 - $i; $j++)
            if ($arr[$j] > $arr[$j + 1]){
                $temp = $arr[$j];
                $arr[$j] = $arr[$j+1];
                $arr[$j+1] = $temp;
            }
                
}

插入排序

 public function insertSort(&$arr){
        for($i = 1;$i < count($arr); $i++){
            $temp = $arr[$i];
            for($j = $i - 1;$j >= 0 && $arr[$j] > $temp; $j--)
            $arr[$j + 1] = $arr[$j];
            $arr[$j] = $temp;
        }
    }

快速排序

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

        if($len <= 1)
            return $arr;
        $left = $right = [];
        $mid_index = $len>>1;echo $len,".....",$mid_index,"
"; $mid_value = $arr[$mid_index]; for($i = 0;$i < $len;$i++){ if($i == $mid_index) continue; if($arr[$i] < $mid_value) $left[] = $arr[$i]; else $right[] = $arr[$i]; } return array_merge($this->quickSort($left),(array)$mid_value,$this->quickSort($right)); }

归并排序

    public function merge_sort($arr){
        $len = count($arr);
        if($len <= 1)
            return $arr;
        $half = ($len >> 1) + ($len & 1);dd(($len >> 1));
        $arr2d = array_chunk($arr,$half);
        $left = $this->merge_sort($arr2d[0]);
        $right = $this->merge_sort($arr2d[1]);
        while(count($left) && count($right)){
            if($left[0] < $right[0])
                $reg[] = array_shift($left);
            else
                $reg[] = array_shift($right);
        }
        return array_merge($reg,$left,$right);
    }

堆排序

    public function swap(&$x,&$y){
        $t = $x;
        $x = $y;
        $y = $t;
    }
    public function max_heapify(&$arr,$start,$end){
        $dad = $start;
        $son = $dad*2+1;
        if($son >=$end)
            return;
        if($son + 1 < $end && $arr[$son] < $arr[$son + 1])
            $son++;
        if($arr[$dad] < $arr[$son]){
            $this->swap($arr[$dad],$arr[$son]);
            $this->max_heapify($arr,$son,$end);
        }
    }
    public function heap_sort($arr){
        $len = count($arr);//获取个数
        for($i = ceil($len/2) - 1;$i >= 0;$i--){//处理一半的数据
            $this->max_heapify($arr,$i,$len);
        }
        for($i= $len-1;$i > 0;$i--){
            $this->swap($arr[0],$arr[$i]);
            $this->max_heapify($arr,0,$i);
        }
        return $arr;
    }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28915.html

相关文章

  • 数据结构:八大排序——直接插入、希尔、选择、、冒泡、快速归并、计数排序

    摘要:文章目录常见排序及分类直接插入排序希尔排序选择排序堆排序冒泡排序快速排序快排非递归写法归并排序归并非递归写法计数排序常见排序及分类这里暂时先只总结直接插入排序希尔排序选择排序堆排序冒泡排序快速排序二路归并排序计数排序直 ...

    不知名网友 评论0 收藏0
  • 八大排序算法的Python实现

    摘要:是稳定的排序方法。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。算法实现选择排序堆排序描述堆排序是指利用堆积树堆这种数据结构所设计的一种排序算法,它是选择排序的一种。 1、插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定...

    princekin 评论0 收藏0
  • 七大排序算法总结(java)

    摘要:前面介绍了七大算法的思想与实现步骤,下面来做一个归总。直到无序区中的数为零,结束排序。步骤以从小到大为例,排序数组大小为。比较完以后则排序结束。堆排序思想堆排序是采用树的形式的数据结构来进行排序的,其中每一个堆都是完全二叉树。 前面介绍了七大算法的思想与实现步骤,下面来做一个归总。 排序方法 平均复杂度 最坏复杂度 最好复杂度 辅助空间 稳定性 直接选择排序 O(n^2...

    cartoon 评论0 收藏0
  • 【数据结构】八大排序(超详解+附动图+源码)

    摘要:内部排序数据元素全部放在内存中的排序。这部分主要是内部排序。排序讲解都以升序为例。当到达时,所有元素在统一组内排好序。当时都是预排序,目的是让数组更接近于有序。之后也是以基准值为界限,递归排序基准值左右区间。 目录 前言 常见排序算法的实现 1.插入排序 2.希尔排序 3.选择排序 4.堆排...

    fuchenxuan 评论0 收藏0
  • JavaScript 数据结构与算法之美 - 归并排序快速排序、希尔排序排序

    摘要:之所以把归并排序快速排序希尔排序堆排序放在一起比较,是因为它们的平均时间复杂度都为。归并排序是一种稳定的排序方法。因此,快速排序并不稳定。希尔排序思想先将整个待排序的记录序列分割成为若干子序列。 showImg(https://segmentfault.com/img/bVbvpYZ?w=900&h=250); 1. 前言 算法为王。 想学好前端,先练好内功,只有内功深厚者,前端之路才...

    haitiancoder 评论0 收藏0

发表评论

0条评论

JerryZou

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<