zoukankan      html  css  js  c++  java
  • PHP 直接插入排序

    • 一般直接插入排序的时间复杂度为O ( n^2 ) ,但是当数列基本有序时,如果按照有数列顺序排时,时间复杂度将改善到O( n )
     1 <?php
     2     #指定部分数组元素全部向后移动一位
     3     function move(Array $arr, $start = null, $end = null) {
     4         if(!isset($start) || $start < 0) $start = 0;
     5         if(!isset($end) || $end >= count($arr)) $end = count($arr) - 2;    #最后只能选到倒数第二个元素
     6         for($i = $end; $i >= $start; $i--) {
     7             $arr[$i + 1] = $arr[$i];
     8         }
     9         return $arr;
    10     }
    11     
    12     #插入排序,使用同一个数组后移方法实现
    13     function insertSort(Array $arr) {
    14         for($i = 1; $i < count($arr); $i++) {    #未排序数组,从第二个元素开始
    15             $insertEle = $arr[$i];    #待插入元素
    16             for($j = 0; $j < $i; $j++) {    #已排序好数组,从第一个元素开始
    17                 if($arr[$j] > $arr[$i]) {    #按升序排序
    18                     $arr = move($arr, $j, $i - 1);    #先将已排序好数组中大于待插入元素的元素全部后移一位
    19                     $arr[$j] = $insertEle;    #插入待插入元素
    20                     break;
    21                 }
    22             }
    23         }
    24         return $arr;
    25     }
    26     
    27     $arr = array(5, 1, 7, 4, 6, 2);
    28     $arr = insertSort($arr);
    29     print_r($arr);
    30 ?>

    输出:

    Array ( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 6 [5] => 7 )

    排序过程如下,红色为已排好序部分

     

     

  • 相关阅读:
    hdu4597 Play Game DP
    poj2253 Frogger Dijkstra变形
    poj1797 Heavy Transportation Dijkstra算法的简单应用
    49.将手机收藏信息保存到文件中
    48.XML保存衣服尺码信息
    47.多客户端用户登录
    46. 模拟用户登录的功能
    45.客户咨询问题
    44. 客户端发送信息给服务器端
    43.创建线程的两种方法
  • 原文地址:https://www.cnblogs.com/zemliu/p/2643035.html
Copyright © 2011-2022 走看看