Java排序算法(六):直接插入排序
来源:互联网 发布:薄暮知秋什么意思 编辑:程序博客网 时间:2024/06/09 14:47
Java排序算法(六):直接插入排序
直接插入排序的基本操作就是将待排序的数据元素按其关键字值的大小插入到前面的有序序列中。
直接插入的时间效率并不高,如果在最坏的情况下,所有元素的比较次数总和为(0+1+...+n-1)=O(n^2)。其他情况下也要考虑移动元素的次数,故时间复杂度为O(n^2)
直接插入空间效率很好,只需要1个缓存数据单元,也就是说空间复杂度为O(1).
直接插入排序是稳定的。
直接插入排序在数据已有一定顺序的情况下,效率较好。但如果数据无规则,则需要移动大量的数据,其效率就与冒泡排序法和选择排序法一样差了。
算法描述
对一个有n个元素的数据序列,排序需要进行n-1趟插入操作:
第1趟插入,将第2个元素插入前面的有序子序列--此时前面只有一个元素,当然是有序的。
第2趟插入,将第3个元素插入前面的有序子序列,前面2个元素是有序的。
第n-1趟插入,将第n个元素插入前面的有序子序列,前面n-1个元素是有序的。
代码实现
- package sort;
- public class InsertSortTest {
- public static int count = 0;
- public static void main(String[] args) {
- int[] data = new int[] { 5, 3, 6, 2, 1, 9, 4, 8, 7 };
- print(data);
- insertSort(data);
- print(data);
- }
- public static void insertSort(int[] data) {
- for (int i = 1; i < data.length; i++) {
- // 缓存i处的元素值
- int tmp = data[i];
- if (data[i] < data[i - 1]) {
- int j = i - 1;
- // 整体后移一格
- while (j >= 0 && data[j] > tmp) {
- data[j + 1] = data[j];
- j--;
- }
- // 最后将tmp插入合适的位置
- data[j + 1] = tmp;
- print(data);
- }
- }
- }
- public static void print(int[] data) {
- for (int i = 0; i < data.length; i++) {
- System.out.print(data[i] + "\t");
- }
- System.out.println();
- }
- }
运行结果:
- 5 3 6 2 1 9 4 8 7
- 3 5 6 2 1 9 4 8 7
- 2 3 5 6 1 9 4 8 7
- 1 2 3 5 6 9 4 8 7
- 1 2 3 4 5 6 9 8 7
- 1 2 3 4 5 6 8 9 7
- 1 2 3 4 5 6 7 8 9
- 1 2 3 4 5 6 7 8 9
0 0
- Java排序算法(六):直接插入排序
- Java排序算法(六):直接插入排序
- Java排序算法(六):直接插入排序 .
- Java排序算法(六):直接插入排序
- 排序算法--直接插入排序(JAVA)
- java实现排序算法之插入排序(直接插入排序,折半插入排序,希尔排序)
- java算法之二直接插入排序(插入排序)
- 算法六之直接插入排序
- 算法六之直接插入排序
- JAVA算法(直接插入排序)
- Java算法 直接插入排序
- java 直接插入排序算法
- Java直接插入排序算法
- java算法【直接插入排序】
- Java直接插入排序算法
- 算法---插入排序(直接插入排序)
- 排序算法--插入排序(直接插入排序、折半插入、shell排序)的java实现
- java排序算法之直接插入排序
- Java排序算法(四):冒泡排序
- asp.net微信公众平台开发
- 划线实现"黑白跑游戏"模拟
- 摘抄
- Java排序算法(五):快速排序
- Java排序算法(六):直接插入排序
- Java排序算法(七):折半插入排序
- hdu 1011 Starship Troopers 树形dp
- Android:自定义Seekbar
- 物化视图日志
- win7 64位配置mysql 5.6免安装版,初始化配置和Mysql创建新用户方法 .
- 黑马程序员 数组
- Java排序算法(八):希尔排序(Shell排序)
- hdu 4975 最大流及其唯一性判定(有向图环判断算法升级)