博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法:七大排序算法的PHP实现
阅读量:5843 次
发布时间:2019-06-18

本文共 3855 字,大约阅读时间需要 12 分钟。

由于最近在找工作,面试中难免会遇到一些算法题,所以就用PHP把七大排序算法都实现了一遍,也当做是一种复习于沉淀。

  1. 冒泡排序 2. 选择排序 3. 插入排序 4. 快速排序 5. 希尔排序 6. 归并排序 7. 堆排序(较麻烦)
/** * 冒泡排序 */function bubble($arr) {    $length = count($arr);    for ($i=1; $i<$length; ++$i) {        for ($j=0; $j < $length-$i; ++$j) {            if ($arr[$j] > $arr[$j+1]) {                $tmp = $arr[$j];                $arr[$j] = $arr[$j+1];                $arr[$j+1] = $tmp;            }        }    }    return $arr;}
/** * 选择排序 */function select($arr) {    $length = count($arr);      for ($i=0; $i<$length-1; ++$i) {        $minIndex = $i;        for ($j=$i+1; $j<$length; ++$j) {            if ($arr[$j] < $arr[$minIndex]) {                $minIndex = $j;            }        }        if ($minIndex != $i) {            $tmp = $arr[$minIndex];            $arr[$minIndex] = $arr[$i];            $arr[$i] = $tmp;        }    }    return $arr;}
/** * 插入排序 */function insert($arr) {    $length = count($arr);      for ($i=1; $i<$length; ++$i) {        $tmp = $arr[$i];        for ($j=$i-1; $j>=0; --$j) {            if ($tmp < $arr[$j]) {                $arr[$j+1] = $arr[$j];                $arr[$j] = $tmp;            } else {                break;            }        }    }    return $arr;}
/** * 快速排序 */function fast($arr) {    $length = count($arr);    if ($length < 1) {        return [];    }    $mid = $arr[0];    $left = [];    $right = [];    for ($i=1; $i<$length; ++$i) {        if ($arr[$i] < $mid) {            $left[] = $arr[$i];        } else {            $right[] = $arr[$i];        }    }        $sortLeft = fast($left);    $sortRight = fast($right);        return array_merge($sortLeft, [$mid], $sortRight);}
/** * 归并排序 */function merge($arr) {    $length = count($arr);    if ($length < 2) {        return $arr;        }        $left = [];    $right = [];    for ($i=0; $i<$length; ++$i) {        if ($i < $length/2) {            $left[] = $arr[$i];        } else {            $right[] = $arr[$i];        }    }    $left = merge($left);    $right = merge($right);    $merge = [];    while (count($left) > 0 && count($right) >0) {        if ($left[0] < $right[0]) {            $merge[] = array_shift($left);        } else {            $merge[] = array_shift($right);        }    }    if (count($left) > 0) {        $merge = array_merge($merge, $left);    } elseif (count($right) > 0) {        $merge = array_merge($merge, $right);    }        return $merge;}
/** * 希尔排序 */function shell($arr) {    $length = count($arr);      for ($gap = floor($length/2); $gap >0; $gap = floor($gap/2)) {        for ($i=$gap; $i<$length; $i += $gap) {            $tmp = $arr[$i];            for ($j=$i-$gap; $j>=0; $j -= $gap) {                if ($tmp < $arr[$j]) {                    $arr[$j+$gap] = $arr[$j];                    $arr[$j] = $tmp;                } else {                    break;                }            }        }        echo $gap."\n";    }    return $arr;}
/** * 堆排序 */function heap($arr) {    $length = count($arr);    for ($i=floor($length/2)-1; $i>=0; --$i) {        $arr = adjustHeap($arr, $i, $length);    }    for ($i=$length-1; $i>=0; --$i) {        $tmp = $arr[0];        $arr[0] = $arr[$i];        $arr[$i] = $tmp;                $arr = adjustHeap($arr, 0, $i);    }       return $arr;}function adjustHeap($arr, $index, $length) {    $lchild = 2*$index+1;    $rchild = 2*$index+2;    $max = $index;    if ($index<=floor($length/2)-1) {        if ($lchild<$length && $arr[$lchild] > $arr[$max]) {            $max = $lchild;        }        if ($rchild<$length && $arr[$rchild] > $arr[$max]) {            $max = $rchild;        }        if ($max != $index) {            $tmp = $arr[$index];            $arr[$index] = $arr[$max];            $arr[$max] = $tmp;            $arr = adjustHeap($arr, $max, $length);        }    }        return $arr;}

转载于:https://www.cnblogs.com/sunkeydev/p/5225165.html

你可能感兴趣的文章
Linux/windows P2V VMWare ESXi
查看>>
运维工程师在干什么学些什么?【致菜鸟】
查看>>
Linux中iptables详解
查看>>
java中回调函数以及关于包装类的Demo
查看>>
maven异常:missing artifact jdk.tools:jar:1.6
查看>>
创业维艰、守成不易
查看>>
PHP环境安装套件:快速安装LAMP环境
查看>>
CSS3
查看>>
ul下的li浮动,如何是ul有li的高度
查看>>
C++ primer plus
查看>>
python mysqlDB
查看>>
UVALive 3942 Remember the Word Tire+DP
查看>>
从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~目录...
查看>>
被需求搞的一塌糊涂,怎么办?
查看>>
c_数据结构_队的实现
查看>>
jquery 选择器总结
查看>>
Qt设置背景图片
查看>>
【阿里云文档】常用文档整理
查看>>
java中的Volatile关键字
查看>>
前端自定义图标
查看>>