zoukankan      html  css  js  c++  java
  • 十大排序算法之插入排序(3)

    3.插入排序

    <?php
    
    /**
     * 基础插入排序
     *
     */
    function insertionSort($sortData)
    {
        $count = count($sortData);
        $sortCount = 0;
        for ($i = 1; $i < $count; $i++) {
            $preIndex = $i - 1;
            $current = $sortData[$i];
            $sortCount++;
            while ($preIndex >= 0 && $current < $sortData[$preIndex]) {
                $sortData[$preIndex + 1] = $sortData[$preIndex];
                $preIndex--;
                $sortCount++;
            }
            $sortData[$preIndex + 1] = $current;
        }
        echo 'insertionSort Count:' . $sortCount;
        echo PHP_EOL;
        return $sortData;
    }
    
    /**
     * 插入排序优化1:可以使用查找算法减少有序序列的查询效率(如2分查找)
     *
     */
    function insertionSort_2($sortData)
    {
        $count = count($sortData);
        $sortCount = 0;
        for ($i = 1; $i < $count; $i++) {
            $current = $sortData[$i];
            $start = binarySearchIndex($sortData, $i - 1, $current, $sortCount);
            for ($j = $i - 1; $j >= $start; $j--) {
                $sortCount++;
                $sortData[$j + 1] = $sortData[$j];
            }
            $sortData[$start] = $current;
        }
        echo 'insertionSort_2 Count:' . $sortCount;
        echo PHP_EOL;
        return $sortData;
    }
    
    function binarySearchIndex($sortData, $end, $compare, &$sortCount)
    {
        $start = 0;
        while ($start <= $end) {
            $sortCount++;
            $middle = intval(($start + $end) / 2);
            if ($sortData[$middle] > $compare) {
                $end = $middle - 1;
            } else {
                $start = $middle + 1;
            }
        }
        return $start;
    }
    
    $testSortData = [3, 2, 9, 234, 3432, 43, 22, 33, 21312, 123];
    
    $sortResult = insertionSort($testSortData);
    echo 'insertionSort Result:';
    echo PHP_EOL;
    echo(implode(',', $sortResult));
    echo PHP_EOL;
    
    $sortResult = insertionSort_2($testSortData);
    echo 'insertionSort_2 Result:';
    echo PHP_EOL;
    echo(implode(',', $sortResult));
    echo PHP_EOL;
  • 相关阅读:
    python把汉字转换成拼音实现程序
    C#第三方zip解压压缩工具,带事例源码
    实现在线压缩文件的实现程序代码
    如何处理JSON中的特殊字符
    《汉字简体、繁体相互转换》 查看源代码
    中文字符转拼音源码
    upper_bound()函数使用方法
    CodeFroces New Assignment 二分图匹配
    选拔赛 hash 字符串匹配 哈希算法(白书p374)
    lower_bound()函数使用
  • 原文地址:https://www.cnblogs.com/qiye5757/p/14390057.html
Copyright © 2011-2022 走看看