插入排序 Insertion Sort
来源:互联网 发布:淘宝打包员招聘 编辑:程序博客网 时间:2024/05/17 06:17
插入排序:流程描述
- 从第一个元素开始,该元素可以认为已经被排序。
- 选中下一个元素,从已经排好序的元素中从后向前扫描。
- 如果该元素(已排序的)大于选中元素,则将该元素移动到它后面的位置。
- 重复3步骤,直到找到已排序的元素小于等于选中元素。
- 将选中元素插入4步骤元素的后面。
- 重复2-5步骤。
插入排序:简单例子
- 3 7 9 6 8 0 2 5 1
- 3 7 9 6 8 0 2 5 1
- 3 7 9 6 8 0 2 5 1
- 3 6 7 9 8 0 2 5 1
- 3 6 7 8 9 0 2 5 1
- 0 3 6 7 8 9 2 5 1
- 0 2 3 6 7 8 9 5 1
- 0 2 3 5 6 7 8 9 1
- 0 1 2 3 5 6 7 8 9
插入排序:是一种简单的排序算法。在数据量比较大时,它没有那些高级算法高效。比如堆排序、归并排序、快速排序。但是插入排序也有自身的有点:
- 简单。
- 高效(数据少时)。
- 自适应数据集也就是大幅排序后的数据集,时间复杂度为O(n+d),d是为排序的数据的个数。
- 比其它时间复杂度同为O(n²)的排序算法高效很多,比如选择排序和冒泡排序。
- 稳定。不改变相同键值的元素的顺序。
- 原地行。只需要大小为O(1)的额外内存空间来存储元素。
- 可以在接受的数据集上直接排序。
插入排序:最好、最坏、平均状况
- 最好情况是输入数据已经按要求排序。这时候的时间复杂度为O(n)。
- 最坏情况是输入数据已经排序,但不是按要求。即所谓的反序排列。这时候,它的时间复杂度为O(n²)。
- 平均状况时间复杂度也是n的二次方。
插入排序:代码(JAVA)
public List<T> sort(List<T> paras) {if (null == paras) {return null;}int size = paras.size();if (1 >= size) {return paras;}for (int index = 1; index < size; index++) {T keyValue = paras.get(index);int position = index - 1;boolean isMove = false;for (; position >= 0; position--) {T positionValue = paras.get(position);if (positionValue.compareTo(keyValue) > 0) {paras.set(position + 1, positionValue);isMove = true;} else {break;}}if (isMove) {paras.set(position + 1, keyValue);}}return paras;}
插入排序:小结
插入排序算法确实很简单,但是要正确实现,还是要费点心思的。说着容易做着难,是因为说的时候,没有说出全部内容。希望大家指正。
- 插入排序(insertion sort)
- insertion sort 插入排序
- 插入排序(Insertion Sort)
- 插入排序 Insertion Sort
- 插入排序Insertion sort
- 插入排序 (Insertion Sort)
- 插入排序Insertion sort
- 插入排序 Insertion Sort
- 插入排序 insertion sort
- 插入排序 insertion sort
- 插入排序Insertion sort
- 插入排序 Insertion sort
- 插入排序 Insertion Sort
- 插入排序-----Insertion Sort
- INSERTION-SORT插入排序
- 插入排序Insertion Sort
- insertion sort(插入排序)
- 插入排序-Insertion sort
- Java中堆内存与栈内存分配浅析
- java指针
- 关于设计模式的学习
- 【编程珠玑】空间换时间的数据结构问题
- CentOS6 快速搭建轻量级远程桌面 Xfce & VNC & Firefox
- 插入排序 Insertion Sort
- A Christmas Carol——2、The first of the three spirits
- java学习
- error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用 MSVCRTD.lib
- linux内核panic
- html5 canvas宽高属性设置
- Good Article Good sentence HDOJ4416
- linux网卡绑定技术
- 强大的JS版分页