zoukankan      html  css  js  c++  java
  • 插入排序算法Java实现

    一. 算法描述

    插入即表示将一个新的数据插入到一个有序数组中,并继续保持有序。例如有一个长度为N的无序数组,进行N-1次的插入即能完成排序;第一次,数组第1个数认为是有序的数组,将数组第二个元素插入仅有1个有序的数组中;第二次,数组前两个元素组成有序的数组,将数组第三个元素插入由两个元素构成的有序数组中......第N-1次,数组前N-1个元素组成有序的数组,将数组的第N个元素插入由N-1个元素构成的有序数组中,则完成了整个插入排序。
      图1演示了对4个元素进行直接插入排序的过程,共需要(a),(b),(c)三次插入。

    二. 算法分析

    平均时间复杂度:O(n2)

    空间复杂度:O(1)  (用于记录需要插入的数据)

    稳定性:稳定

    三. 算法实现

      

    package com.neuedu.algorithm;
    
    import java.util.Arrays;
    
    public class InsertSort {
    //插入排序
    	
    	public static void insertSort(int[] a) {
            int i, j, insertNote;// 要插入的数据
            for (i = 1; i < a.length; i++) {// 从数组的第二个元素开始循环将数组中的元素插入
                insertNote = a[i];// 设置数组中的第2个元素为第一次循环要插入的数据
                j = i - 1;
                while (j >= 0 && insertNote < a[j]) {
                    a[j + 1] = a[j];// 如果要插入的元素小于第j个元素,就将第j个元素向后移动
                    j--;
                }
                a[j + 1] = insertNote;// 直到要插入的元素不小于第j个元素,将insertNote插入到数组中
            }
        }
    
        public static void main(String[] args) {
            int a[] = { 38,65,97,76,13,27,49 };
            insertSort(a);
            System.out.println(Arrays.toString(a));
        }
    } 
    

      

  • 相关阅读:
    【codevs1227】方格取数2(最大流费最大流-模板
    【ZJOI2008】【BZOJ1033】杀蚂蚁(占坑待填
    python基础学习1-流程控制和判断
    python基础学习1-变量定义赋值,屏幕输入输出
    Jzoj5237 最长公共子序列
    Jzoj5236 利普希茨
    [置顶] 欢迎使用CSDN-markdown编辑器
    Jzoj5235 好的排列
    Jzoj5234 外星人的路径
    Jzoj5231 序列问题
  • 原文地址:https://www.cnblogs.com/lc-java/p/7930405.html
Copyright © 2011-2022 走看看