【排序算法】直接插入排序(java实现)
2016-04-28 16:25
711 查看
1.基本思想:
在排序算法中算是一种非常简单直观的排序算法。将第一个元素作为已排好的序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。2.算法分析:
时间复杂度:O(N^2)空间复杂度:O(1)
稳定性: 稳定
3.算法实现:
//直接插入 public static void InsertSort(int[] array){ for (int i = 1 ;i < array.length ; i++){ int t = array[i]; int j =i-1; while(j >= 0 && array[j] > t){ array[j+1] = array[j]; j--; } array[j+1] = t; //将待排元素插入正确位置 } }
4.算法优化:
对于之间插入排序,在每趟插入过程中,都进行了两项工作:(1)从前面的子序列中查找出带插入元素应该被插入的位置
(2)给插入位置腾出空间,将带插入元素复制到表中插入位置。
该算法总是变比较边移动。因为被比较的子序列是有序是,可以考虑二分查找的方法进行,虽然这样的比较次数变少约O(nlog2n),但移动次数不变,仍为O(N^2).
//折半插入 public static void InsertSort(int[] array){ int j; for (int i = 1 ;i < array.length ; i++){ int low = 0, high = i-1; int insert = array[i]; //二分查找待排元素应该插入的位置 while(low <= high){ int mid = (low + high)/2; if (insert > array[mid]){ low = mid +1; }else{ high = mid -1; } } for (j = i; j > low ; j--){ array[j] = array[j-1]; } array[j] = insert; } }
相关文章推荐
- JDK源码学习(2)-String.intern()方法详解
- eclipse svn 忽略target .settings
- java中static方法不能被重写但是能重定义
- eclipse中配置jUnit
- JAVA除法保留小数点后两位的方法
- Maven搭建SpringMVC+Mybatis项目详解
- 20145210 《Java程序设计》第09周学习总结
- Java 将内容写入到某个文件中
- Java读取txt或其他文件以UTF-8格式输出的时候,第一行代码出现“?”乱码的原因及解决方案!
- eclipse启动报JVM terminated. Exit code=-1的解决方法
- java 获得程序运行时间
- Spring通过实现getBean方法获得Bean的实例
- 不惑JAVA之JAVA基础 - 反射
- Java中try catch finally语句中含有return语句的执行情况(总结版)
- java中的类集框架
- spring + hibernate3
- 史上最全最强SpringMVC详细示例实战教程
- springMvc入门案例
- JAVA WEB项目异常处理提示页
- 设计模式-单例模式