package com.young4j.sort;/**

* 直接插入排序

*

* 插入排序就是将当前待排序的元素插入到一个已经排序好的列表里。比较形象的例子就是右手抓取一张扑克,将它

* 插入到左手拿着的排序好的一堆扑克里边。时间复杂度为O(n2),空间复杂度O(1),并不是最优的排序算法,特点为:简单,无需额外存储空间。

* 如果元素包含的内容过大,就不适合直接插入排序,因为直接插入排序需要移动元素的次数比较多.

*

* 基本思想:

* 将n哥待排序的元素看成一个有序列表和一个无序列表,开始有序列表中只有一个元素,无序列表中有n-1个元素。

* 每次从无序列表中取出第一个元素,将它插入到有序列表中,使之成为新的有序列表,重复n-1次完成整个排序。

* @author YF

**/import org.slf4j.Logger;

import org.slf4j.LoggerFactory;public classInsertionSort {

Logger logger= LoggerFactory.getLogger(this.getClass());public static voidmain(String[] args) {int a[] = {31,25,78,12,41,19,6,1};newInsertionSort().insertionSort(a);

}/**

* 直接插入排序算法

* @param args*/

private void insertionSort(int[] args) {

logger.info("--------------------------直接插入排序算法--------------------------");int n =args.length;inti,j;for(i = 1;i < n;i ++) {//本次排序待插入有序列表中的元素

int temp =args[i];//将temp插入有序列表中正确的位置,从后往前循环,将大于待插入的数向后移动

for(j = i - 1;j >= 0 && args[j] > temp;j --) {//将待插入元素后移,为插入temp做准备

args[j + 1] =args[j];

}//插入temp

args[j + 1] =temp;

print(args,n,i);

}

printResult(args,n);

}/**

* 打印排序的最终结果

* @param a

* @param n*/

private void printResult(int[] a, intn){

System.out.print("最终排序结果:");for(int j=0;j

System.out.print(" "+a[j]);

}

System.out.println();

}/**

* 打印排序的每次循环的结果

* @param a

* @param n

* @param i*/

private void print(int[] a, int n, inti) {//TODO Auto-generated method stub

System.out.print("第"+i+"次:");for(int j=0;j

System.out.print(" "+a[j]);

}

System.out.println();

}

}

java 主流算法_java常用算法相关推荐

  1. java常见的算法_Java常用算法总结(转)

    交换排序 冒泡排序 将最后一个元素与倒数第二个元素对比,如果最后一个元素比倒数第二个小,则交换两个元素的位置,再用倒数第二个元素与倒数第三个元数对比,直到比到第一个元素,这样经过第一趟排序后得到第一个 ...

  2. java基础排序_Java排序算法-Java入门|Java基础课程

    1. 课程目标排序是任何语言都会使用到的功能之一,然成果排序的算法有很多,对空间的要求及其时间效率也不尽相同. 本文章以Java语言示例,通过对空间要求.时间效率要求,来对比各种排序算法的使用场景 2 ...

  3. 【数据结构与算法】常用算法

    五大常用算法 分治 动态规划 最优子结构 边界 状态转移函数 爬楼梯问题: 4. 最优子结构 F(10)的最优子结构为F(9)和F(8) 5. 边界 F(1) = 1 F(2) = 2 6. 状态转移 ...

  4. java 比较器类_java常用类——比较器

    Comparable和Comparator接口都是为了对类进行比较,众所周知,诸如Integer,double等基本数据类型,java可以对他们进行比较,而对于类的比较,需要人工定义比较用到的字段比较 ...

  5. java 性能 排序_Java常用排序算法及性能测试集合

    package algorithm.sort; import java.lang.reflect.Method; import java.util.Arrays; import java.util.D ...

  6. java 类数组_Java常用类-字符串、日期类、算法及数组工具类等

    大家好,乐字节的小乐又和大家见面了.这次要给大家讲述的是Java常用类. 主要有以下知识点: Ø 字符串相关类(String .StringBuffer.StringBuilder) Ø 算法及数组工 ...

  7. java 常用算法_Java常见算法整理

    兔子问题(斐波那契数列规律) 台阶问题 (兔子问题变种,递归规律) 素数问题(判断素数.质数方式) 水仙花数问题(数字分解) 查找算法(二分查找) 排序算法(选择排序,冒泡排序,快速排序) 兔子问题, ...

  8. java基础_数组常用算法

    求数组最大值代码如下 package java_test; /*求数组的最大值* */ class Sdent{public void inputMax(int [] a){int max=a[0]; ...

  9. java基础之算法_java基础算法

    package com.sxwl; import org.springframework.boot.SpringApplication; import org.springframework.boot ...

  10. java程序两点之间最短路径算法_java 最短路径算法 如何实现有向 任意两点的最短路径...

    展开全部 Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节e68a8462616964757a686964616f31333361316131点的最短路径.主要 ...

最新文章

  1. 1到10选一个数字读心术_厉害了!quot;广东110“互联网报警满足您多场景报警需求!...
  2. 字符与字符串操作——Windows via C/C++
  3. Android ARM指令学习
  4. 10.傅里叶变换——达利画家、基集(Basis Set)、傅里叶级数(Fourier Series)_1
  5. WebSocket使用,包括服务端和客户端(JAVA实现)
  6. mysql 多实例 独立配置文件_mysql 5.7 配置多实例 — 独立配置文件方式
  7. 6、mysql与suse查看版本信息
  8. 2022年,想自学java有没有一个详细的框架?
  9. limesurvey php5.2,Limesurvey二次开发(接入CAS统一身份认证)随笔
  10. web处理html标记,web前端学习-----HTML标记
  11. python文件操作实现全文或单行替换
  12. 基于ubuntu 20.04与cri-docker 搭建部署高可用k8s 1.25.3
  13. python记忆式键入,在Python编程模式下输入命令”print(100+200)“执行的结果是()
  14. 快递到车服务的实现思路和问题思考
  15. 音频文件格式转换 转为 wav格式
  16. IDC:爱数再次蝉联备份一体机市场中国品牌第一
  17. VC++ 通过wmic获取主板和BIOS序列号
  18. 《layui宇宙版教程》:字体图标
  19. 网页图片快速显示的六种办法
  20. Rust actix aiohttp_介绍 - actix-web 中文文档 - Rust-Web 开发指南

热门文章

  1. c语言0x00如何不截断_数组越界及其避免方法,C语言数组越界详解
  2. 【校内模拟】2048
  3. 20165320 我期望的师生关系
  4. C# 控制台如何播放音频文件
  5. 使用Objective-C的+(void)initialize初始化static变量
  6. 水晶报表图表出现红叉叉的解决方法
  7. oracle异步sql,Oracle sqlplus登陆异步io错误
  8. spring扩展点五:factoryBean的使用
  9. 为企业选择最合适的SSL证书
  10. 简述Java内存模型的happen before原则