zoukankan      html  css  js  c++  java
  • 直接插入排序(Straight Insertion Sort)

    基本思想:

    直接插入排序的基本思想是 : 每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。

    第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从后向前扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。

    直接插入排序是由两层嵌套循环组成的。外层循环标识并决定待比较的数值。内层循环为待比较数值确定其最终位置。直接插入排序是将待比较的数值与它的前一个数值进行比较,所以外层循环是从第二个数值开始的。当前一数值比待比较数值大的情况下继续循环比较,直到找到比待比较数值小的并将待比较数值置入其后一位置,结束该次循环。

    插入排序的基本方法是:每步将一个待排序的记录按其关键字的大小插到前面已经排序的序列中的适当位置,直到全部记录插入完毕为止。

    <?php
    //直接插入排序
    function swap(array &$arr,$a,$b){
      $temp = $arr[$a];
      $arr[$a] = $arr[$b];
      $arr[$b] = $temp;
    }
    function InsertSort(array &$arr){
      $count = count($arr);
      //数组中第一个元素作为一个已经存在的有序表
      for($i = 1;$i < $count;$i ++){
        $temp = $arr[$i];   //设置哨兵
        for($j = $i - 1;$j >= 0 && $arr[$j] > $temp;$j --){
          $arr[$j + 1] = $arr[$j];    //记录后移
        }
        $arr[$j + 1] = $temp;   //插入到正确的位置
      }
    }
    $arr = array(9,1,5,8,3,7,4,6,2);
    InsertSort($arr);
    var_dump($arr);
  • 相关阅读:
    UVALive 5983 MAGRID DP
    2015暑假训练(UVALive 5983
    poj 1426 Find The Multiple (BFS)
    poj 3126 Prime Path (BFS)
    poj 2251 Dungeon Master 3维bfs(水水)
    poj 3278 catch that cow BFS(基础水)
    poj3083 Children of the Candy Corn BFS&&DFS
    BZOJ1878: [SDOI2009]HH的项链 (离线查询+树状数组)
    洛谷P3178 [HAOI2015]树上操作(dfs序+线段树)
    洛谷P3065 [USACO12DEC]第一!First!(Trie树+拓扑排序)
  • 原文地址:https://www.cnblogs.com/mmmzh/p/10141011.html
Copyright © 2011-2022 走看看