php实现直接插入排序算法

此算法主要原理:每次把一个待排序的关键码插入到已排好序的序列中。

排序过程:

1、整个序列分成有序区和无序区,初始化有序区为待排序记录的第一个记录,无序区为剩下的待排序记录。
2、取无序区的第一个记录插入到有序区的合适位置中。
3、重复以上操作直到无序区为空

下面我用具体的数组来演示一遍整体效果

假设有一组待排序数据:8、5、1、9、3
初始 [ 8 ] 5 1 9 3 <strong>中括号代表有序区</strong>

8 向 5 位置后移,5放在 8的前面
第一趟 排序 [ 5 8 ] 1 9 3

5 和 8 各后移一个位置 ,
第二趟排序 [ 1 5 8 ] 9 3

1、5 和 8 不移动,位置不变 ,9放在 8 后面
第三趟排序 [ 1 5 8 9 ] 3

5、8和 9各后移一个位置,1放在3 的前面
第四趟排序 [ 1 3 5 8 9 ]

得到最终结果 1 3 5 8 9

附上我的php代码演示

<?php

  $data = array(
    1=>8,
    2=>5,
    3=>1,
    4=>9,
    5=>3
  ); 
  
  $lenth = count($data);
  for($i=2; $i<=$lenth; $i++){
     $data[0] = $data[$i];
     for($j=$i-1; $data[0]<$data[$j]; $j--){
        $data[$j+1] = $data[$j];
     }
     $data[$j+1] = $data[0];
  }
  unset($data[0]);
  echo "<pre>";print_r($data);die;
?>

以上 使用 $data[0] 是为了防止 数组越界报错使用的,并且充当哨兵的作用。

运行输出如下

Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Ba la la la ~ 读者朋友们,你们好啊,又到了冷锋时间,话不多说,发车! 1.冒泡排序(Bub...
    王饱饱阅读 5,768评论 0 7
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 9,086评论 0 15
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 10,592评论 0 52
  • 某次二面时,面试官问起Js排序问题,吾绞尽脑汁回答了几种,深感算法有很大的问题,所以总计一下! 排序算法说明 (1...
    流浪的先知阅读 4,914评论 0 4
  • 排序的基本概念 在计算机程序开发过程中,经常需要一组数据元素(或记录)按某个关键字进行排序,排序完成的序列可用于快...
    Jack921阅读 5,356评论 1 4