直接插入排序
2016-07-01 15:22
127 查看
思想
每次将一个待排序的元素作为关键字,按照其关键字值的大小插入的已经排号的部分序列中的适当位置,直到插入完成步骤
1.从第一个元素开始,该元素可以认为已经被排序2.取出下一个元素,在已经排序的元素序列中从后向前扫描
3.如果该元素(已排序)大于新元素,将该元素移到下一位置
4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
5.将新元素插入到该位置中
6.重复步骤2
例子
图来源图中链接
程序
package alg.sort; public class InsertSort { public void Sort(int A[]){ int n = A.length; for(int i=1;i<n;i++){ int x = A[i]; int j=i-1; while(j>=0 && A[j]>x){ // 0 - j内的元素比 i处的元素小则后移 A[j+1] = A[j]; j--; } A[j+1] = x; // 插入位置 } } public static void main(String[] args){ int[] A = new int[]{49,38,65,97,76,13,27,49}; PrintArray.printArray(A); InsertSort insertSort = new InsertSort(); insertSort.Sort(A); PrintArray.printArray(A); } }
复杂度分析
(1)时间复杂度最好情况:while循环内条件都为false,说明原始数据已经有序,时间复杂度O(n)O(n)
最坏情况:while循环中的0-i-1都满足,插入的数据在第一个位置,说明原始数据是逆序的,时间复杂度O(n2)O(n^2)
平均时间复杂度:O(n2)O(n^2)
(2)空间复杂度
中间只用到一个变量x,空间复杂度O(1)O(1)
其他
直接插入排序在一趟排序中没有把一个记录到达最后的位置
参考:
1.《数据结构高分笔记》
2. 链接
相关文章推荐
- piwik API的应用
- win10 uwp smms图床
- Android录屏功能的实现
- python中反射(__import__和getattr使用)
- easyui 选中指定行
- 使用 JS 复制文本内容
- Java/Swift 单例模式的多种写法
- 设置viewpager在使用setCurrentItem的滑动速度
- Oracle--多用户控制
- 简单明了的cocoapods的使用
- MacBook Air 2013双系统装机
- orbslam2(2)-追踪
- orbslam2(2)-追踪
- 使用sessionStorage、localStorage存储数组与对象
- MySQL学习——标识符语法和命名规则
- Softmax函数
- 用ThinkPHP3.2.2框架做手机和PC端浏览器的切换
- pycharm 破解
- modelsim 没有波形的一个问题
- Masonry中的mas_equalTo和equalTo