插入排序

也可叫直接插入排序,该算法的思路是:初始可认为文件中的第1个记录已排好序,然后将第2个到第n个记录依次插入到已排序的记录组成的文件中。

步骤:

假设有一组数组为(数组下标0—n-1):

arrays={49,38,65,97,176,213,227,49,78,34,12,164,11,18,1};
一,从下标为1的数据(当前数据)开始遍历,而且之后往后移直到下标为n-1(数组的最后一位下标数据);
二,定义一个变量并保存当前数据;
三,当前数据与前面数据依次对比直到前面数据的下标为0,如果大于当前数据,则把前面的数据往右移一位;
四,每执行第三步后,将之前保存当前数据的变量赋值为给前面数据的下标加1.

流程图:

代码:

 public class TestInsert {
//直接插入排序
public static void insertSort(int[] arrays){
int i,j;
//从第二位开始遍历,(之后把第i位数据叫作当前数据)
for (i = 1; i <arrays.length; i++){
//保存当前数据为temp
int temp = arrays[i];
j = i - 1; //把 j 赋值为 i 的前一个数据
//循环,如果j大于等于0 且 第j个数据大于当前数据
while (j >= 0 && arrays[j] > temp){
arrays[j+1] = arrays[j]; //第j个数据往右移一位
j = j - 1; //往前一位一位移动
}
//把当前数据赋给arrays[j+1],因为在while循环内最后总会j-1
arrays[j+1] = temp;
System.out.println("第"+i+"次:"+Arrays.toString(arrays));
}
System.out.println("最后结果:"+Arrays.toString(arrays));
} public static void main(String[] args) {
int[] arrays={49,38,65,97,176,213,227,49,78,34,12,164,11,18,1};
insertSort(arrays);
}
}

测试结果:

第1次:[38, 49, 65, 97, 176, 213, 227, 49, 78, 34, 12, 164, 11, 18, 1]
第2次:[38, 49, 65, 97, 176, 213, 227, 49, 78, 34, 12, 164, 11, 18, 1]
第3次:[38, 49, 65, 97, 176, 213, 227, 49, 78, 34, 12, 164, 11, 18, 1]
第4次:[38, 49, 65, 97, 176, 213, 227, 49, 78, 34, 12, 164, 11, 18, 1]
第5次:[38, 49, 65, 97, 176, 213, 227, 49, 78, 34, 12, 164, 11, 18, 1]
第6次:[38, 49, 65, 97, 176, 213, 227, 49, 78, 34, 12, 164, 11, 18, 1]
第7次:[38, 49, 49, 65, 97, 176, 213, 227, 78, 34, 12, 164, 11, 18, 1]
第8次:[38, 49, 49, 65, 78, 97, 176, 213, 227, 34, 12, 164, 11, 18, 1]
第9次:[34, 38, 49, 49, 65, 78, 97, 176, 213, 227, 12, 164, 11, 18, 1]
第10次:[12, 34, 38, 49, 49, 65, 78, 97, 176, 213, 227, 164, 11, 18, 1]
第11次:[12, 34, 38, 49, 49, 65, 78, 97, 164, 176, 213, 227, 11, 18, 1]
第12次:[11, 12, 34, 38, 49, 49, 65, 78, 97, 164, 176, 213, 227, 18, 1]
第13次:[11, 12, 18, 34, 38, 49, 49, 65, 78, 97, 164, 176, 213, 227, 1]
第14次:[1, 11, 12, 18, 34, 38, 49, 49, 65, 78, 97, 164, 176, 213, 227]
最后结果:[1, 11, 12, 18, 34, 38, 49, 49, 65, 78, 97, 164, 176, 213, 227]

时间复杂度:因为外层循环为n-1,所以在最好的情况下,序列本身就是有序的,那么时间复杂度为O(n);最坏的情况下循环次数为n*(n-1)/2,那么时间复杂度为O(n2)。

空间复杂度:插入排序算法,只需要两个变量暂存当前数,以及下标,与n的大小无关,所以空间复杂度为:O(1)。

结语:

  语言表达能力不好,所以只能这样了,还有就是应该还有这个算法的优缺点没有写,明着说,我还不知道。

Java八大排序之插入排序的更多相关文章

  1. Java八大排序算法

    Java八大排序算法: package sort; import java.util.ArrayList; import java.util.Arrays; import java.util.List ...

  2. Java选择排序,插入排序,快速排序

      public class Test { public static void main(String[] args) { int a[] = { 1, 2, 3, 4, 5 }; 选择排序(a); ...

  3. 八大排序算法——插入排序(动图演示 思路分析 实例代码java 复杂度分析)

    一.动图演示 二.思路分析 例如从小到大排序: 1.  从第二位开始遍历, 2.  当前数(第一趟是第二位数)与前面的数依次比较,如果前面的数大于当前数,则将这个数放在当前数的位置上,当前数的下标-1 ...

  4. java八大排序代码

    import java.util.ArrayList;import java.util.List; public class FastSort { public static void main(St ...

  5. 必须知道的Java八大排序算法

    冒泡排序.简单选择.直接插入.快速排序.堆排序.希尔排序.归并排序.基数排序. 将其按排序方式分类如下图所示: 1.冒泡排序: 基本思想——在要排序的一组数中,对当前还未排好序的范围内的全部数据,自上 ...

  6. Java八大排序之希尔(Shell)排序

    希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该 ...

  7. Java八大排序之堆排序

    堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法.堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点. 根据根结点是否是最 ...

  8. Java八大排序之基数排序

    基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分 ...

  9. 八大排序算法原理以及Java实现(直接插入排序)

    概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大, ...

随机推荐

  1. react的路由权限控制

    在使用路由的时候,有的时候我们的界面只能够在登录之后才可以看的到,这个时候就需要使用路由权限控制了 找了资料发现一个就是我使用的方法,一个是高阶组件. 原谅菜鸟看不太懂不会使用高阶组件………… 首先在 ...

  2. 05webpack-webpack-dev-server时时跟新-第2种方式

    <!--14 第一种方式 自动打开浏览器 端口号 指定托管的跟目录 启动热刷新 这种是在webpack.json中去配置的 直接在package中 写 将“script”:{ "dev ...

  3. 04webpack--webpack-dev-server 时时跟新

    <!-- 如何添加npm run dev 启动程序 下载npm i webpack-dev-server -S 在pack.json中添加 "dev": "webp ...

  4. 计算多个点中距离最远的两个点 python

    import numpy as npfrom scipy import spatial print("hello")# test pointspts = np.random.ran ...

  5. Codeforces Round #554 (Div. 2) C 数论

    https://codeforces.com/contest/1152/problem/C 题意 a和b,找到k,使得lcm(a+k,b+k)最小(a,b:1e9) 题解 设gcd=gcd(a+k,b ...

  6. Python爬取拉勾网招聘信息并写入Excel

    这个是我想爬取的链接:http://www.lagou.com/zhaopin/Python/?labelWords=label 页面显示如下: 在Chrome浏览器中审查元素,找到对应的链接: 然后 ...

  7. VBA基础 - 函数和模块

    概要 对于一般的 VBA 程序来说, 可能一个或几个函数就行了. 毕竟, VBA 只是作为 excel 的辅助工具来用的. 但是, 随着 VBA 写的越来越多, 用个工程来管理就有必要了, 而一个代码 ...

  8. python创建文件时去掉非法字符

    1.函数作用 windows系统中文件名不能包含 \ / : * ? " < > |想要创建必须过滤掉这些字符 2.函数实现 import re def filename_fil ...

  9. python-4-格式化输出

    前言 有些小伙伴在打印中乱码或者编码不对,在这里讲格式化输出前,先讲下编码.我们都知道目前主流使用就是utf-8编码. 一.编码简介 编码用来让计算机识别,当然我们都知道计算机只能识别01010101 ...

  10. 【shell脚本】创建账户及删除账户,批量创建账户及批量删除账户===autoCreateUser.sh

    一.字符串运算符 二.创建账户 1.提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码.如果用户不输入账户名,则提示必须输入账户名并退出脚本;如果用户不输入密码,则统一使用默认的 123456 ...