插入排序
来源:互联网 发布:微信电影网站源码 编辑:程序博客网 时间:2024/06/03 15:17
原理
将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,是稳定的排序方法。
实现
从第二个元素开始往后,依次选择哨兵元素和前面的元素比较,如果前一个元素大于该哨兵元素(从小到大排序),则把前面那个元素移动到后一个位置;继续往前比较,直到找某个元素不大于该哨兵元素,则把哨兵元素插入到位置上。
插入排序的步骤:
1、第二个元素开始外后选择一个哨兵元素;
2、让哨兵元素和前面的元素进行比较,找到合适的位置插入;
3、循环上面两步,直到选择完所有元素;
function insertSort($arr) { if (!is_array($arr) || count($arr) == 0) return $arr; $count = count($arr); for ($i = 1; $i < $count; $i++) { // 获取第二个元素的值 $tmp = $arr[$i]; // 获取前面的值的下标 $j = $i - 1; // 如果前面的值比后面的值大,这里是从小到大 while ($arr[$j] > $tmp) { // 把小的元素和前面的对换,直到移动到合适的位置,在移动下一个 $arr[$j + 1] = $arr[$j]; $arr[$j] = $tmp; if ($j > 0) $j--; } } return $arr;}
时间空间复杂度
在最好的情况下(元素已经排好顺序):那么只需要循环 n-1 次就可以了,时间复杂度为 O(n)。
在最差的情况下 (元素是逆序的):要循环调整次数: [ n * (n-1) ] / 2 ,时间复杂度为 为 O(n²)。
平均时间复杂度为:O(n²)。
空间复杂度为 O(1)。
阅读全文
0 0
- 插入排序-【插入排序】
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- Objective-C Foundation
- instant run 导致 ClassNotFoundException ,意外吧?
- 分享一个免费自动发帖软件,免费自动发布信息软件
- 单词翻转
- 用对象的思想递归求解《母牛的故事》问题
- 插入排序
- uC/OS-II源码解析(os_cpu.h)
- 2004年分区联赛普级组之四 火星人(dfs)
- 13个人围成一圈喊道3的退出 求最后一个人的序号
- 最简单易懂最深刻的数据库讲解
- mysql的left join、right join、inner join、union等连接查询
- HTTP Content-type 对照表
- 利用队列实现二叉树的层次遍历
- Linux开启mysql远程连接的设置步骤