插入排序
插入排序
一、关于插入排序:
有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,
这个时候就要用到一种新的排序方法——插入排序法。
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据。
二、插入排序特点:
1、算法适用于少量数据的排序;
2、时间复杂度为O(n^2);
3、是稳定的排序方法。
三、算法步骤:
⒈ 从第一个元素开始,该元素可以认为已经被排序
⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描
⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置
⒋ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
⒌ 将新元素插入到下一位置中
⒍ 重复步骤2~5
如果比较操作的代价比交换操作大的话,可以采用二分查找法来减少比较操作的数目。
该算法可以认为是插入排序的一个变种,称为二分查找排序。
四、代码示例:
/** * 插入排序 * @param array $arr 数组 * @return boolean|array */ function insert_sort($arr){ if(!is_array($arr)){ return false; } if(empty($arr)){ return $arr; } $len = count($arr); for($i=0;$i<$len;$i++){ $tmp = $arr[$i]; $key = $i; while($key>0 && $tmp<=$arr[$key-1]){ $arr[$key] = $arr[$key-1]; $key--; } if($key != $i){ $arr[$key] = $tmp; } } return $arr; }