排序算法-插入排序
来源:互联网 发布:找工作什么软件最靠谱 编辑:程序博客网 时间:2024/06/05 21:57
插入排序是最简单排序算法之一.
算法分析
插入排序由N-1趟排序组成,对于p=1到N-1趟,插入排序保证位置0到位置p-1之间的位置是已排好序的,在第p趟,在p位置上的数据会向左移动,知道找到正确的位置.
假设有以下待排序数字: 16, 8 , 13, 36, 28, 14
p=1时, 要排序的数字为8,排序之后的顺序为 : 8, 16, 13, 36, 28, 14, 移动了1次
p=2时, 要排序的数字为13,排序之后的顺序为 : 8, 13, 16, 36, 28, 14,移动了1次
p=3时, 要排序的数字为36,排序之后的顺序为 : 8, 13, 16, 36, 28, 14,移动了0次
p=4时, 要排序的数字为28,排序之后的顺序为 : 8, 13, 16, 28, 36, 14,移动了1次
p=5时, 要排序的数字为14,排序之后的顺序为 : 8, 13, 14, 16, 28, 36,移动了3次
最终排序好的数字顺序: 8, 13, 14, 16, 28, 36
Java代码演示
public static <AnyType extends Comparable<? super AnyType>> void insertSort(AnyType[] a) { int j; for (int p = 1; p < a.length; p++) { AnyType tmp = a[p]; /*tmp记录p位置上的数据*/ for (j = p; j > 0 && tmp.compareTo(a[j - 1]) < 0; j--) {/*碰到左边的值小于或等于tmp时,结束本次循环*/ a[j] = a[j - 1]; /*比tmp大的往后移*/ } a[j] = tmp; /*赋值到正确的位置*/ } }
1:先用局部变量记录p位置的值
2:与p-1的位置开始比较,如果比p-1位置的值小,则p-1位置的值往后移动一位;否则直接结束本次内部循环
3:最后p位置的值赋给正确的位置
时间复杂度
对于第p趟的比较最多p次,有1+2+3+4+….+n,则时间复杂度为O(n^2).
实际上,若是数据之前已排过续,则时间复杂度为O(n),因为第二个循环中的校验始终不成立而结束内部循环.
所以,如果要排序一串大多数已排好序的数据,插入排序还是很快的.
0 0
- 排序算法-插入排序
- 排序算法--插入排序
- 排序算法---插入排序
- 排序算法-插入排序
- 排序算法-插入排序
- 排序算法--插入排序
- 排序算法-插入排序
- 排序算法-插入排序
- 排序算法---插入排序
- 排序算法--插入排序
- 排序算法--插入排序
- 排序算法--插入排序
- 排序算法-插入排序
- 排序算法--插入排序
- 排序算法-插入排序
- 排序算法-插入排序
- 排序算法--插入排序
- 排序算法-插入排序
- IP数据报重组与分片 与多道程序设计的优点
- hibernate缓存机制详解
- Android Wear WearableListView 实现+源码
- npm设置镜像如淘宝:http://npm.taobao.org/
- 7-1、Spark-Scheduler
- 排序算法-插入排序
- android 6.0 SystemUI源码分析(5)-PowerUI介绍
- oracle外键约束表无法truncate
- HDOJ--5611(Baby Ming and phone number)(闰年)
- MySQL · 引擎特性 · InnoDB文件系统管理(二)
- MySQL · 引擎特性 · InnoDB Fulltext简介
- hihoCoder #1269 : 优化延迟 【二分 + 优先队列】
- python之正则表达式
- 使用pip安装指定版本的Python包