1. 插入排序原理图:

算法步骤

1)将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。

2)从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。

2. 插入排序的代码实现:

 1 package cn.itcast;
 2
 3 /*
 4  * 插入排序基本思想
 5  * 将n个元素的数列分为已有序和无序两个部分,如插入排序过程示例下所示:   
 6  * {{a1},{a2,a3,a4,…,an}}   
 7  * {{a1,a2},{a3,a4 …,an}}  
 8  * {{a1(n-1),a2(n-1) ,…},{an(n-1)}}   
 9  * 每次处理就是将无序数列的第一个元素与有序数列的元素从后往前逐个进行比较,
10  * 找出插入位置,将该元素插入到有序数列的合适位置中。
11  */
12 public class InsertSort {
13     public static void sort(int[] data) {
14         for (int i = 1; i < data.length; i++) {
15             for (int j = i; (j > 0) && (data[j] < data[j - 1]); j--) {
16                 swap(data, j, j - 1);
17             }
18         }
19
20     }
21
22 /*
23      * 交换数组中的两个元素
24      */
25     public static void swap(int[] data, int i, int j) {
26         int temp = data[i];
27         data[i] = data[j];
28         data[j] = temp;
29     }
30 }

3. 插入排序的示例代码,如下:

 1 /* package whatever; // don't place package name! */
 2
 3 import java.util.*;
 4 import java.lang.*;
 5 import java.io.*;
 6
 7 /* Name of the class has to be "Main" only if the class is public. */
 8 class Ideone
 9 {
10     public static void main (String[] args) throws java.lang.Exception
11     {
12         int[] array = new int[] {12, 33, 4, 15, 25, 55, 18};
13
14         sort(array);
15         printArray(array);
16     }
17
18     public static void sort(int[] data) {
19         for (int i = 1; i < data.length; i++) {
20             for (int j = i; (j > 0) && (data[j] < data[j - 1]); j--) {
21                 swap(data, j, j - 1);
22             }
23         }
24
25     }
26
27      public static void swap(int[] data, int i, int j) {
28         int temp = data[i];
29         data[i] = data[j];
30         data[j] = temp;
31     }
32
33      public static void printArray(int[] array) {
34
35         System.out.print("[");
36
37         int i;
38         for(i= 0; i<array.length; i++) {
39
40             if(i ==array.length-1) {
41                 System.out.print(array[i]);
42             } else {
43                 System.out.print(array[i]+",");
44             }
45         }
46         System.out.print("]");
47
48     }
49 }

运行程序,如下:

转载于:https://www.cnblogs.com/hebao0514/p/4834376.html

Java基础知识强化54:经典排序之插入排序(InsertSort)相关推荐

  1. Java基础知识强化之集合框架笔记76:ConcurrentHashMap之 ConcurrentHashMap简介

    1. ConcurrentHashMap简介: ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和Hashtable功能相同但是线程安全的方法.Conc ...

  2. Java基础知识强化53:经典排序之选择排序(SelectionSort)

    1.选择排序的原理图: 2. 选择排序代码实现: 1 package cn.itcast_02; 2 3 /* 4 * 数组排序之选择排序: 5 * 从0索引开始,依次和后面元素比较,小的往前放,第一 ...

  3. Java基础知识强化51:经典排序之桶排序(BucketSort)

    1. 首先说明三点: (1)桶排序是稳定的 (2)桶排序是常见排序里最快的一种,比快排还要快-大多数情况下 (3)桶排序非常快,但是同时也非常耗空间,基本上是最耗空间的一种排序算法 2. 桶排序的分析 ...

  4. Java基础知识强化之集合框架笔记56:Map集合之HashMap集合(HashMapString,Student)的案例...

    1. HashMap集合(HashMap<String,Student>)的案例 HashMap是最常用的Map集合,它的键值对在存储时要根据键的哈希码来确定值放在哪里. HashMap的 ...

  5. Java基础知识强化之集合框架笔记27:ArrayList集合练习之去除ArrayList集合中的重复字符串元素...

    1. 去除ArrayList集合中的重复字符串元素(字符串内容相同) 分析: (1)创建集合对象 (2)添加多个字符串元素(包含重复的) (3)创建新的集合 (4)遍历旧集合,获取得到每一个元素 (5 ...

  6. Java基础知识强化之IO流笔记44:IO流练习之 复制图片的 4 种方式案例

    1. 复制图片的 4 种方式案例: 分析: 复制数据,如果我们知道用记事本打开并能够读懂,就用字符流,否则用字节流. 通过该原理,我们知道我们应该采用字节流. 而字节流有4种方式,所以做这个题目我们有 ...

  7. Java基础知识强化之网络编程笔记04:UDP之发送端的数据来自于键盘录入案例

    1. 数据来自于键盘录入 键盘录入数据要自己控制录入结束. 2. 代码实现: (1)发送端: 1 package com.himi.updDemo1; 2 3 import java.io.IOExc ...

  8. Java基础知识强化99:Java 常见异常及趣味解释

    常见 Java 异常解释:(译者注:非技术角度分析.阅读有风险,理解需谨慎:) 1. java.lang java.lang软件包是java语言的核心部分,它提供了java中的基础类. java.la ...

  9. Java基础知识强化之网络编程笔记03:UDP之UDP协议发送数据 和 接收数据

    1. UDP协议发送数据 和 接收数据 UDP协议发送数据: • 创建发送端的Socket对象 • 创建数据,并把数据打包 • 调用Socket对象的发送方法,发送数据包 • 释放资源  UDP协议接 ...

  10. Java基础知识强化14:Java死亡竞赛题目解析

      一个小型网站上发布了一个称为Java"死亡竞赛"的新项目.测验发布后,超过20000位开发者参加了测验.网站以20道关于Java的多选题为主.我们得到了众多开发者的测验统计数据 ...

最新文章

  1. 观《超能陆战队》未来的“机器人设计师”的必备装备
  2. Java 线程池详解学习:FixedThreadPool,CachedThreadPool,ScheduledThreadPool...
  3. 一个数据库存储架构的独白
  4. linux加载虚拟sriov网卡,如何配置BroadCOM网卡的SR-IOV功能
  5. springSecurity源码分析-spring-security.xml文件配置
  6. Spring 的持久化实例(JDBC, JdbcTemplate、HibernateDaoSupport、JdbcDaoSupport、SqlSessionDaoSupport等)...
  7. Spark GraphX算法 - PageRank算法
  8. 坐地起价、山寨横行、人身骚扰:割韭菜的刀,还是“搬家公司”快
  9. controller,sevices层,java初步了解
  10. mysql no cache_关于对MySQL的SQL_NO_CACHE的理解和用法举例
  11. k8s 1.16安装metrics server
  12. 渐进式Web应用(PWA)入门教程(下)
  13. 带拼音的,城市筛选组件
  14. 2015.3.12Arinc424 Tools中SiniArincCls.csParserFile(string sFile)函数正则表达式理解
  15. JindoFS解析 - 云上大数据高性能数据湖存储方案
  16. 电脑4g内存C语言CAD够用吗,电脑4g内存够用吗-电脑4g内存是否够用详情介绍 - 系统家园...
  17. uni-app生成pdf,依赖html2canvas和jspdf
  18. CentOS Mac 安装zsh,使用oh-my-zsh
  19. 无人机飞控技术-市场现状及未来发展趋势
  20. 周金涛:人生就是一次康波

热门文章

  1. Qt之进程间通信(Windows消息)
  2. 在云上搭建大规模实时数据流处理系统
  3. linux 忘记原来的myql的root的密码
  4. win7下声音图标消失的解决办法
  5. EXPLAIN mysql性能调优
  6. Java 18 就要来了,新功能很多!
  7. 开源的IDE?还真是头一次见!Github标星30.7K!值得拥有!
  8. Java序列化 3 连问,这太难了吧!
  9. 金九银十招聘季,程序员跳槽BAT最新面经
  10. 从把三千行代码重构成15行代码谈起—好牛X的哟!!