1 直接插入排序

1.1 算法思想

插入排序的基本思想是:每一趟将1个待排序的记录,按其关键字的大小插入到已经排好序的一组记录的适当位置上,直到所有待排序记录全部插入为止。

1.2 算法特征

  • 属于【插入排序】

  • 适用于【稳定性】:稳定
  • 适用于【规模N】:较小
  • 适用于【有序性】:有序
  • 适用于【存储结构】:顺序存储or链式存储(二者均可)
  • 【时间复杂度】:O(N)(最好) / O(NN) (平均) / O(NN) (最坏)
  • 【空间复杂度】:O(1) (最好/平均/最坏)
  • 相关口诀:【插冒归堆】好有序,【插冒】记录个数小,【插冒二选】时N方

1.3 算法实现

import java.util.Arrays;

public class InsertSort {//直接插入排序 - 升序
public static int [] insertSort(int [] array){
int [] resultArray = Arrays.copyOfRange(array, 0, array.length);
int insertingEleValue,j;
for(int i=1;i<resultArray.length;i++){
if(resultArray[i-1] > resultArray[i]){ //前面已排序部分的最后1个元素比当前i元素还大时
insertingEleValue = resultArray[i];//待插入的元素值
for(j=i-1;j>=0&&resultArray[j]>insertingEleValue;j--){//j>=0:防止j越界;resultArray[j]>insertingEleValue:后移的必备条件
resultArray[j+1] = resultArray[j];
}
resultArray[j+1] = insertingEleValue;//for循环中多减了1,故补上1
}
}
return resultArray;
}
}

1.4 测试实现

import java.util.Scanner;

public class Main {
public static void print(int[] array){
if(array==null || array.length<1){
return;
}
for(int i=0;i<array.length-1;i++){
System.out.print(array[i]+" ");
}
System.out.println(array[array.length-1]);
} public static void main(String[] args) {
//1 输入 一组 乱序的数值 数组
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
String [] strValues = input.trim().split(" ");
int [] array = new int[strValues.length];
for(int i=0,len=strValues.length;i<len;i++){
array[i] = Integer.valueOf(strValues[i]).intValue();//假定所有输入均为合规的整型数值
}
// print(array);// test - 输出 所输入的数据 //2 排序
int [] sortedArray = InsertSort.insertSort(array);
//3 输出
print(sortedArray);
}
}

1.5 参考文献

  • 《数据结构(C语言-第2版-严蔚敏 吴伟民 著)》:Page237

[Java]排序算法>插入排序>【直接插入排序】(O(N*N)/稳定/N较小/有序/顺序存储+链式存储)的更多相关文章

  1. 线性表 顺序存储 链式存储 ---java实现

    首先抽象出一个线性表抽象类(包括主要的增删操作) public abstract class MyAbstractList<E> { public abstract void add(E ...

  2. Java常见排序算法之折半插入排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  3. Java常见排序算法之直接插入排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  4. java排序算法(七):折半插入排序

    java排序算法(七):折半插入排序 折半插入排序法又称为二分插入排序法,是直接插入排序法的改良版本,也需要执行i-1趟插入.不同之处在于第i趟插入.先找出第i+1个元素应该插入的位置.假设前i个数据 ...

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

    java排序算法(六):直接插入排序 直接插入排序的基本操作就是将待的数据元素按其关键字的大小插入到前面的有序序列中 直接插入排序时间效率并不高,如果在最坏的情况下,所有元素的比较次数的总和为(0+1 ...

  6. 排序算法之直接插入排序Java实现

    排序算法之直接插入排序 舞蹈演示排序: 冒泡排序: http://t.cn/hrf58M 希尔排序:http://t.cn/hrosvb  选择排序:http://t.cn/hros6e  插入排序: ...

  7. 算法相关——Java排序算法之插入排序(四)

    0. 前言 本系列文章将介绍一些常用的排序算法.排序是一个非常常见的应用场景,也是开发岗位面试必问的一道面试题,有人说,如果一个企业招聘开发人员的题目中没有排序算法题,那说明这个企业不是一个" ...

  8. Java排序算法之直接选择排序

    Java排序算法之直接选择排序 基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上.第二次从R[1]~R[n-1]中选 ...

  9. java排序算法(一):概述

    java排序算法(一)概述 排序是程序开发中一种非常常见的操作,对一组任意的数据元素(活记录)经过排序操作后,就可以把它们变成一组按关键字排序的一组有序序列 对一个排序的算法来说,一般从下面三个方面来 ...

  10. java排序算法(八):希尔排序(shell排序)

    java排序算法(八):希尔排序(shell排序) 希尔排序(缩小增量法)属于插入类排序,由shell提出,希尔排序对直接插入排序进行了简单的改进,它通过加大插入排序中元素之间的间隔,并在这些有间隔的 ...

随机推荐

  1. Linux基础知识2

    目录和文件管理 linux以目录形式挂载(通过目录访问存储设备)文件系统,目录结构分层的树形结构. 链接:在共享文件和访问它的用户的若干目录项之间建立联系的方法,包括硬链接和软链接两种方式 linux ...

  2. StarUML画用例图

    好久没画图在StarUML里都找不到useCase了,记下来不然又忘了 右击Untitled->Add Diagram->UseCase Diagram,然后左边就有UseCase了就可以 ...

  3. YII oracle

    以 11.2 为例 , 注意必须要与数据库版本对应下载如下两个文件instantclient-basic-linux.x64-11.2.0.4.0.zip https://download.oracl ...

  4. cesium 入门指南

    最近拿到了几份offer,经过这次找工作发现自己最近脱节挺严重,为了后续的职业发展,决定开始书写博客记录自己的努力. cesium属于 跨平台.跨浏览器的展现三维地球.地图的JavaScript库. ...

  5. MP逻辑删除

    在实体类中加上@TableLogic注解 在配置类中加入逻辑删除插件

  6. 使用虚拟 dom 渲染页面 《vue.js 设计与实现》

     使用 js 对象描述 ui 更加灵活.假如我们要根据级别不同采用不同的标签.js 对象描述的话,只需要一个变量代表 h 标签即可. // 当变量改变时,标签也会变化. let level = 3 c ...

  7. Java基础学习——Arrays类

    1.数组复制 Arrays.copyOfRange(original, from, to) 此方法与System.arraycopy类似. 不同的是System.arraycopy需要提前声明目标数组 ...

  8. postman 8.7.0 下的cookie 禁用

    简介:以下过程描述在postman8.7.0中,如何禁用掉cookie,使每次请求都带空cookie去请求服务器. 有一个简单投票场景.投票连接是一个get请求, 类似如http://domain/t ...

  9. Vue2使用axios,request.js和vue.config.js

    1.配置request.js,用来请求数据 import axios from 'axios' // 1:利用axios对象的方法create,创建一个axios实例 // 2:request就是ax ...

  10. 一个关于 Linux环境下输出操作符 >和>>的问题

    [>和>>的区别]命令>文件,表示以覆盖的方式,把命令正确输出到指定的文件或者设备当中:命令>>文件,表示以追加的方式,把命令正确输出到指定的文件或者设备当中. [ ...