zoukankan      html  css  js  c++  java
  • php插入式排序的两种写法。

    百度了下插入式排序,百度百科中php版本的插入式排序如下:

     1 function insert_sort($arr) {
     2     // 将$arr升序排列
     3     $count = count($arr);
     4     for ($i=1; $i<$count; $i++) {
     5         $tmp = $arr[$i];
     6         $j = $i - 1;
     7         while ($j >=0 && $arr[$j] > $tmp) {
     8             $arr[$j+1] = $arr[$j];
     9             $j--;
    10         }
    11         if (($j+1) != $i) {
    12             $arr[$j+1] = $tmp;            
    13         }
    14     }
    15     return $arr;
    16 }

    看着实在是别扭,然后就翻了下Robert Sedgewick写的《算法》,书中的代码都是用java实现的,在这里将插入式排序改用php重写一下:

     1 function new_insert_sort($arr) {
     2     // 将$arr升序排列
     3     $count = count($arr);
     4     for ($i=1; $i<$count; $i++) {// 索引,完成一次插入就需要将索引$i右移
     5         // 将arr[i]插入到a[i-1]、a[i-2]、a[i-3]...之中,也就是如果符合条件就交换位置
     6         for ($j=$i; $j>0 && $arr[$j] < $arr[$j-1]; $j--) {
     7             $tmp = $arr[$j];
     8             $arr[$j] = $arr[$j-1];
     9             $arr[$j-1] = $tmp;
    10         }
    11     }
    12     return $arr;
    13 }

    我觉得第二种写法更容易让人理解,就像《算法》中写到:插入式排序就像爱玩扑克牌的人整理牌一样,将每一张牌插入到其他已经排好序的牌的适当位置。另外,百度时还发现了博客园的文章Frank Fan的文章插入式排序,也可以看看。

  • 相关阅读:
    冲刺第四天
    冲刺第三天
    构建之法阅读笔记03
    冲刺第二天
    第八周学习进度条
    冲刺第一天
    第七周学习进度条
    软件工程课堂练习:返回一个一维整数数组中最大子数组的和
    团队项目成员和题目
    调用TerminateProcess是无法触发DLL_PROCESS_DETACH的
  • 原文地址:https://www.cnblogs.com/yangtoude/p/4840546.html
Copyright © 2011-2022 走看看