java排序算法:直接插入排序

Posted 让我们只争朝夕,不负韶华,共同迎接2020年的到来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java排序算法:直接插入排序相关的知识,希望对你有一定的参考价值。

java排序算法(六):直接插入排序

  直接插入排序的基本操作就是将待的数据元素按其关键字的大小插入到前面的有序序列中

   直接插入排序时间效率并不高,如果在最坏的情况下,所有元素的比较次数的总和为(0+1..n-1)= o(n^2).其他情况下也要考虑移动元素的次数。故时间复杂度是o(n^2)

   直接插入空间效率很好,只需要一个缓存数据单元,也就是说空间复杂度是o(1)

   直接插入排序是稳定的

   直接插入排序在数据以有一定顺序的情况下,效率较好。但如果数据无规则,则需要移动大量的数据。其效率就和冒泡排序和选择排序一样差了。

  算法描述

  对一个有n个元素的数据序列,排序需要n-1趟插入操作

  第一趟插入 将第二个元素插入到前面的有序子序列-此时前面只有一个元素。当然是有序的

  第二趟插入 将第三个元素插入前面的有序子序列。前面两个元素都是有序的

  第n-1趟插入将第n个元素插入前面的有序序列,前面n-1个元素是有序序列

  代码实现

  

package com.spring.test;

import java.awt.print.Printable;

/**
 * 直接插入排序算法
 */
public class InsertSortTest {
    public static void main(String[] args) {
        int[] data = new int[] { 5, 3, 6, 2, 1, 9, 4, 8, 7 };
        print(data);
        insertSort(data);
        System.out.println("排序后的数组");
        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();
    }

    /**
     * 交换数据
     */
    public static void swap(int[] data,int i,int j){
        if(i==j){
            return;
        }
        data[i] = data[i]+data[j];
        data[j] = data[i]-data[j];
        data[i] = data[i]-data[j];
    }
}

 

运行结果

 

以上是关于java排序算法:直接插入排序的主要内容,如果未能解决你的问题,请参考以下文章

Java算法 直接插入排序 -- 直接插入排序算法的非递归和递归形式实现

Java常用的八种排序算法与代码实现

Java与算法之 - 直接插入排序

Java常用的八种排序算法与代码实现

java----八种排序算法

实例 | Java 折半插入排序算法及解析