插入排序及优化

插入排序过程可以理解为排扑克牌 ,每次摸起一张 依次比较后插入到相应的位置,下面图片是从百度图库中找的。
在这里插入图片描述


 $arr = [53,27,36,15,69,42];


 function insert_sort($arr){
     $len = count($arr);
     
     //从第二个数开始是因为默认认为第一个数是排好序的
     for ($i=1; $i < $len; $i++) {
         //将第$i个数依次和前面排好的数比较插入到合适的位置
         for ($j=$i; $j > 0; $j--) { 
            //  print_r($j."\n");
             if($arr[$j] < $arr[$j-1]){
                 $temp = $arr[$j];
                 $arr[$j] = $arr[$j-1];
                 $arr[$j-1] = $temp;
             }
              print_r($arr);
         }
         print_r(str_repeat('-',20)."\n");
     }
     
     return $arr;
 }

运行过程

Array
(
    [0] => 27
    [1] => 53
    [2] => 36
    [3] => 15
    [4] => 69
    [5] => 42
)
--------------------
Array
(
    [0] => 27
    [1] => 36
    [2] => 53
    [3] => 15
    [4] => 69
    [5] => 42
)
Array
(
    [0] => 27
    [1] => 36
    [2] => 53
    [3] => 15
    [4] => 69
    [5] => 42
)
--------------------
Array
(
    [0] => 27
    [1] => 36
    [2] => 15
    [3] => 53
    [4] => 69
    [5] => 42
)
Array
(
    [0] => 27
    [1] => 15
    [2] => 36
    [3] => 53
    [4] => 69
    [5] => 42
)
Array
(
    [0] => 15
    [1] => 27
    [2] => 36
    [3] => 53
    [4] => 69
    [5] => 42
)
--------------------
Array
(
    [0] => 15
    [1] => 27
    [2] => 36
    [3] => 53
    [4] => 69
    [5] => 42
)
Array
(
    [0] => 15
    [1] => 27
    [2] => 36
    [3] => 53
    [4] => 69
    [5] => 42
)
Array
(
    [0] => 15
    [1] => 27
    [2] => 36
    [3] => 53
    [4] => 69
    [5] => 42
)
Array
(
    [0] => 15
    [1] => 27
    [2] => 36
    [3] => 53
    [4] => 69
    [5] => 42
)
--------------------
Array
(
    [0] => 15
    [1] => 27
    [2] => 36
    [3] => 53
    [4] => 42
    [5] => 69
)
Array
(
    [0] => 15
    [1] => 27
    [2] => 36
    [3] => 42
    [4] => 53
    [5] => 69
)
Array
(
    [0] => 15
    [1] => 27
    [2] => 36
    [3] => 42
    [4] => 53
    [5] => 69
)
Array
(
    [0] => 15
    [1] => 27
    [2] => 36
    [3] => 42
    [4] => 53
    [5] => 69
)
Array
(
    [0] => 15
    [1] => 27
    [2] => 36
    [3] => 42
    [4] => 53
    [5] => 69
)
--------------------

优化后的插入排序


 $arr = [53,27,36,15,69,42];


 function insert_sort($arr){
     $len = count($arr);
     
     //从第二个数开始是因为默认认为第一个数是排好序的
     for ($i=1; $i < $len; $i++) {
         //将第$i个数依次和前面排好的数比较插入到合适的位置

         //记住第i个数
         $temp = $arr[$i];
         for ($j=$i; $j > 0; $j--) { 
            //  print_r($j."\n");
            //找到$i要插入的位置
             if($temp < $arr[$j-1]){
                 $arr[$j] = $arr[$j-1];
             }else{
                 //中断循环保留$i的插入位置
                 break;
             }
             
         }
         //将保存的值插入到合适的位置去
         $arr[$j] = $temp;
         print_r($arr);
         print_r(str_repeat('-',20)."\n");
     }
     
     return $arr;
 }

运行过程

Array
(
    [0] => 27
    [1] => 53
    [2] => 36
    [3] => 15
    [4] => 69
    [5] => 42
)
--------------------
Array
(
    [0] => 27
    [1] => 36
    [2] => 53
    [3] => 15
    [4] => 69
    [5] => 42
)
--------------------
Array
(
    [0] => 15
    [1] => 27
    [2] => 36
    [3] => 53
    [4] => 69
    [5] => 42
)
--------------------
Array
(
    [0] => 15
    [1] => 27
    [2] => 36
    [3] => 53
    [4] => 69
    [5] => 42
)
--------------------
Array
(
    [0] => 15
    [1] => 27
    [2] => 36
    [3] => 42
    [4] => 53
    [5] => 69
)
--------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值