插入排序法

插入排序法

 所谓插入排序法乃是将一个数目插入该占据的位置。
假设我们输入的是 “5,1,4,2,3” 我们从第二个数字开始,这个数字是1,我们的任务只要看看1有没有正确的位置,我们的做法是和这个数字左边的数字来比,因此我们比较1和5,1比5小,所以我们就交换1和5,原来的排列就变成了“1,5,4,2,3 ”
接下来,我们看第3个数字有没有在正确的位置。这个数字是4,它的左边数字是5,4比5小,所以我们将4和5交换,排列变成了 “1,4,5,2,3 "我们必须继续看4有没有在正确的位置,4的左边是1,1比4小,4就维持不动了。
再来看第四个数字,这个数字是2,我们将2和它左边的数字相比,都比2大,所以就将2一路往左移动,一直移到2的左边是1,这时候排序变成了 “1,2,4,5,3 ”
最后,我们检查第五个数字,这个数字是3,3必须往左移,一直移到3的左边是2为止,所以我们的排列就变成了 “1,2,3,4,5 ”排序因此完成了。

所谓插入排序法,就是检查第i个数字,如果在它的左边的数字比它大,进行交换,这个动作一直继续下去,直到这个数字的左边数字比它还要小,就可以停止了。插入排序法主要的回圈有两个变数:i和j,每一次执行这个回圈,就会将第i个数字放到左边恰当的位置去 。     

复杂度分析

排序方法

时间复杂度空间复杂度稳定性复杂性
平均情况最坏情况最好情况
插入排序O(n2)O(n2)O(n)O(n)稳定简单

插入排序原理很简单,将一组数据分成两组,我分别将其称为有序组与待插入组。每次从待插入组中取出一个元素,与有序组的元素进行比较,并找到合适的位置,将该元素插到有序组当中。就这样,每次插入一个元素,有序组增加,待插入组减少。直到待插入组元素个数为0。当然,插入过程中涉及到了元素的移动。

基本思想

 输入一个元素,检查 数组列表中的每个元素,将其插入到一个已经排好序的数列中的适当位置,使数列依然有序,当最后一个元素放入合适位置时,该数组排序完毕。
<?php
 /**
     * 插入排序:
     *  
     *  一、从数组的第1个元素开始遍历至第n个。(n为数组的长度)
     *  二、对于每一个遍历到的元素:
     *      2.1 向前倒着找(已经排好序的)自己的位置。
     *      2.2 如果不符合条件,则前面的元素向后移动,与之交互位置。
     *          直至条件符合。
     */  
  function InsertSort($arr)
    {
      for ($i=0; $i <count($arr) ; $i++)
      {          
      //获取一个有序的值
      $temp=$arr[$i];
      //循环需要插入
      for ($j=$i-1; $j >=0; $j--) {
           //判断 同时跟temp进行比较
          if($temp < $arr[$j])
          {
              $arr[$j+1]=$arr[$j];
              $arr[$j]=$temp;
          }else{
              break;  
          }
      }
   }
   return $arr;
  }
  //假设需要排序的数组
  $arr=array(5,1,2,3,4,11,6,8,9);
  print_r(InsertSort($arr));
 ?>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值