• 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]+"	");
            }
            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];
        }
    }

    运行结果

  • 相关阅读:
    OpenERP实施记录(12):付款处理
    OpenERP实施记录(10):采购补货
    OpenERP实施记录(9):销售一批电脑
    从一个action地址获取信息
    在线杀毒 (最大文件大小64MB)
    WIN7启动WIFI
    Lazy Load, 延迟加载图片的 jQuery 插件【备忘】
    Android 汉字转拼音之JNI篇
    Android Studio 解决方法No JVM installation found. Please install a 64-bit JDK.
    Unity3D移植到自己的Android程序
  • 原文地址:https://www.cnblogs.com/hanxue112253/p/8473875.html
Copyright © 2020-2023  润新知