• php练习算法1000题


    1.冒泡排序

    --索引数组
    ---控制循环轮数
    ----控制每轮,冒出一个数
    -----比较大小,互相替换位置

    代码:

    <?php
    $arr = [2, 66, 43, 54, 62, 21, 66, 66, 32, 78, 36, 76, 39, 1];
    function BubbleSort($arr) {
    // 控制循环轮数
    $len = count($arr);
    for ($i = 1; $i < $len; $i++) {
    // 控制每轮,冒出一个数
    for ($k = 0; $k < $len - $i; $k++) {
    // 比较大小,替换位置
    if ($arr[$k] > $arr[$k + 1]) {
    $tmp = $arr[$k + 1];
    $arr[$k + 1] = $arr[$k];
    $arr[$k] = $tmp;
    }
    }
    }
    return $arr;
    }
    var_dump(implode(',',BubbleSort($arr)));

    结果如下:

    2.选择排序

    --索引数组
    ---控制循环轮数
    ----控制每轮,把所有数跟前面数对比
    -----比较大小,设置位置
    ------若不是原位置则替换

    代码:

    <?php
    $arr = [1, 43, 54, 62, 21, 66, 32, 78, 36, 76, 39, 2];
    //选择排序
    function selectSort($arr){
    // 控制循环轮数
    $len = count($arr);
    for ($i = 0; $i < $len - 1; $i++) {
    $p = $i;

    // 控制每轮,把所有数跟后面数对比
    for ($k = $i + 1; $k < $len; $k++) {
    $p = ($arr[$p] <= $arr[$k]) ? $p : $k;
    }

    // 若不是原位置则替换
    if ($p != $i) {
    $tmp = $arr[$i];
    $arr[$i] = $arr[$p];
    $arr[$p] = $tmp;
    }
    }
    return $arr;
    }
    var_dump(implode(',',selectSort($arr)));
    结果如下:

    3.插入排序

    --索引数组
    ---拿出的多少元素值做比较
    ----内层控制前面元素比较(由后到前)
    -----比较大小,互相替换位置
    ------因前已排序好,若一个不符合,则完成循环

    代码:

    <?php
    $arr = [1, 43, 54, 62, 21, 66, 32, 78, 36, 76, 39,2];
    //插入排序
    function insertSort($arr)
    {
    $len = count($arr);
    // 多少元素值做比较
    for ($i = 1; $i < $len; $i++) {
    $tmp = $arr[$i];

    // 内层控制前面元素比较(由后到前)
    for ($k = $i - 1; $k >= 0; $k--) {

    // 比较大小,互相替换位置
    if ($tmp < $arr[$k]) {
    $arr[$k + 1] = $arr[$k];
    $arr[$k] = $tmp;
    } else {
    // 因前已排序好,若一个不符合,则完成循环
    break;
    }
    }
    }
    return $arr;
    }
    var_dump(implode(',',insertSort($arr)));
    结果如下:

    4.快速排序

    --索引数组
    ---递归出口:数组长度为1,直接返回数组
    ----数组元素有多个,则定义两个空数组
    -----使用for循环进行遍历,把第一个元素当做比较的对象
    ------判断当前元素的大小,小的在左,大的在右
    -------递归左,递归右
    --------合并数组左、第一个元素、右

    代码:

    <?php
    $arr = [1, 43, 54, 62, 21, 66, 32, 78, 36, 76, 39,2];
    //快速排序
    function quickSort($arr)
    {
    // 递归出口:数组长度为1,直接返回数组
    $length = count($arr);
    if ($length <= 1) return $arr;

    // 数组元素有多个,则定义两个空数组
    $left = $right = [];

    // 使用for循环进行遍历,把第一个元素当做比较的对象
    for ($i = 1; $i < $length; $i++) {

    // 判断当前元素的大小
    if ($arr[$i] < $arr[0]) {
    $left[] = $arr[$i];
    } else {
    $right[] = $arr[$i];
    }
    }

    //递归调用
    $left = quickSort($left);
    $right = quickSort($right);

    return array_merge($left, [$arr[0]], $right);
    }
    var_dump(implode(',',quickSort($arr)));exit;
    结果如下:
  • 相关阅读:
    [三、页面布局]10使用List列表在垂直方向显示一系列的内容
    如何确认11.2 RAC Grid Infrastructure的时区
    节后的人才市场开始活跃了?
    最近看中的几款Limitless的家具
    ORA19808错误一例
    Oracle队列锁: Enqueue HW
    解决Oracle错误ORA15061一例
    Maclean Liu的2011年终总结
    全面掌控!打造智慧城市建设的“领导驾驶舱”
    体验SRCNN和FSRCNN两种图像超分网络应用
  • 原文地址:https://www.cnblogs.com/zhyphp/p/16202216.html
Copyright © 2020-2023  润新知