温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PHP如何实现常见排序算法

发布时间:2022-06-07 09:22:15 阅读:182 作者:zzz 栏目:开发技术
PHP开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

本篇内容介绍了“PHP如何实现常见排序算法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1、冒泡排序

两两相比,每循环一轮就不用再比较最后一个元素了,因为最后一个元素已经是最大或者最小。

function maopaoSort ($list)
{
    $len count($list);
    for ($i 0$i $len 1$i++) {
        for ($j 0$j $len $i 1$j++) {
            if ($list[$j] > $list[$j 1]) {
                $tmp $list[$j];
                $list[$j] = $list[$j 1];
                $list[$j 1] = $tmp;
            }
        }
    }
    return $list;
}

2、选择排序

选定一个作为基本值,剩下的和这个比较,然后调换位置。

function xuanzeSort ($list)
{
    $len count($list);
    for ($i 0$i $len 1$i++) {
        $pos $i;
        for ($j $i 1$j $len$j++) {
            if ($list[$pos] > $list[$j]) {
                $pos $j;
            }
        }
        if ($pos != $i) {
            $tmp $list[$pos];
            $list[$pos] = $list[$i];
            $list[$i] = $tmp;
        }
    }
    return $list;
}

3、快速排序

原理就是拿出一个标尺值,然后分为左右两个数组,分别对比

function kuaisuSort ($list)
{
    $len count($list);
    if ($len <= 1) {//递归出口
        return $list;
    }
    $base $list[0];//选择一个比较值
    $leftList $rightList = [];
    for ($i 1$i $len$i++) {
        if ($base $list[$i]) {
            $leftList[] = $list[$i];
        } else {
            $rightList[] = $list[$i];
        }
    }
    //递归分别再处理左右两边的数组
    $leftList kuaisuSort($leftList);
    $rightList kuaisuSort($rightList);
    return array_merge($leftList, [$base], $rightList);
}

4、插入排序

假设前面的数都是排好顺序的,要把第n个数插入到有序里

function charuSort ($list)
{
    $len count($list);
    for ($i 1$i $len$i++) {
        $tmp $list[$i];//获取对比元素
        for ($j $i 1$j 0$j--) {
            if ($list[$j] > $tmp) {
                $list[$j 1] = $list[$j];
                $list[$j] = $tmp;
            } else {
                break;
            }
        }
    }
    return $list;
}

补充

当然PHP还能实现其他的常见排序算法,如归并排序、希尔排序、堆排序等

归并排序

/**
 * 归并排序
 *
 * @param array $lists
 * @return array
 */
 function merge_sort(array $lists)
 {
 $n count($lists);
 if ($n <= 1) {
 return $lists;
 }
 $left merge_sort(array_slice($lists0floor($n 2)));
 $right merge_sort(array_slice($listsfloor($n 2)));
 $lists merge($left$right);
 return $lists;
 } 
function merge(array $leftarray $right)
 {
 $lists = [];
 $i $j 0;
 while ($i count($left) && $j count($right)) {
 if ($left[$i] < $right[$j]) {
 $lists[] = $left[$i];
 $i++;
 } else {
 $lists[] = $right[$j];
 $j++;
 }
 }
 $lists array_merge($listsarray_slice($left$i));
 $lists array_merge($listsarray_slice($right$j));
 return $lists;
 }

希尔排序

/**
 * 希尔排序 标准
 *
 * @param array $lists
 * @return array
 */
 function shell_sort(array $lists)
 {
 $n count($lists);
 $step 2;
 $gap intval($n $step);
 while ($gap 0) {
 for ($gi 0$gi $gap$gi++) {
 for ($i $gi$i $n$i += $gap) {
 $key $lists[$i];
 for ($j $i $gap$j >= 0 && $lists[$j] > $key$j -= $gap) {
 $lists[$j $gap] = $lists[$j];
 $lists[$j] = $key;
 }
 }
 }
 $gap intval($gap $step);
 }
 return $lists;
 }

堆排序

/**
 * 堆排序
 *
 * @param array $lists
 * @return array
 */
 function heap_sort(array $lists)
 {
 $n count($lists);
 build_heap($lists);
 while (--$n) {
 $val $lists[0];
 $lists[0] = $lists[$n];
 $lists[$n] = $val;
 heap_adjust($lists0$n);
 //echo "sort: " . $n . "\t" . implode(', ', $lists) . PHP_EOL;
 }
 return $lists;
 } 
function build_heap(array &$lists)
 {
 $n count($lists) - 1;
 for ($i floor(($n 1) / 2); $i >= 0$i--) {
 heap_adjust($lists$i$n 1);
 //echo "build: " . $i . "\t" . implode(', ', $lists) . PHP_EOL;
 }
 //echo "build ok: " . implode(', ', $lists) . PHP_EOL;
 }

 function heap_adjust(array &$lists$i$num)
 {
 if ($i $num 2) {
 return;
 }
 $key $i;
 $leftChild $i 2 + 1;
 $rightChild $i 2 + 2;
 
 if ($leftChild $num && $lists[$leftChild] > $lists[$key]) {
 $key $leftChild;
 }
 if ($rightChild $num && $lists[$rightChild] > $lists[$key]) {
 $key $rightChild;
 }
 if ($key != $i) {
 $val $lists[$i];
 $lists[$i] = $lists[$key];
 $lists[$key] = $val;
 heap_adjust($lists$key$num);
 }
 }

“PHP如何实现常见排序算法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php
AI

开发者交流群×