排序算法之直接插入排序

舞蹈演示排序:

冒泡排序: http://t.cn/hrf58M

希尔排序:http://t.cn/hrosvb 

选择排序:http://t.cn/hros6e 

插入排序:http://t.cn/hros0W 

快速排序:http://t.cn/ScTA1d 

归并排序:http://t.cn/Sc1cGZ

一、直接插入排序的过程

1、直接插入排序由 N-1 趟排序组成。
2、基本思想:将第一个元素看成一个有序子序列,再依次从第二个记录起诸葛插入到这个有序的子序列中。
  一般地,将 elem[i] 插入到由 elem[0] ~ elem[i-1] 构成的有序子序列中
  时间复杂度:O(n) ~ O(n^2)

原始数组为:
[74, 27, 85, 59, 41, 66, 37, 92, 4, 93]
--------------------------------------
第 1趟
[27, 74, 85, 59, 41, 66, 37, 92, 4, 93]
第 2趟
[27, 74, 85, 59, 41, 66, 37, 92, 4, 93]
第 3趟
[27, 59, 74, 85, 41, 66, 37, 92, 4, 93]
第 4趟
[27, 41, 59, 74, 85, 66, 37, 92, 4, 93]
第 5趟
[27, 41, 59, 66, 74, 85, 37, 92, 4, 93]
第 6趟
[27, 37, 41, 59, 66, 74, 85, 92, 4, 93]
第 7趟
[27, 37, 41, 59, 66, 74, 85, 92, 4, 93]
第 8趟
[4, 27, 37, 41, 59, 66, 74, 85, 92, 93]
第 9趟
[4, 27, 37, 41, 59, 66, 74, 85, 92, 93]
--------------------------------------
排序后的数组为:
[4, 27, 37, 41, 59, 66, 74, 85, 92, 93]

二、直接插入排序的代码实现

1、方法一:

 import java.util.Arrays;

 /**
*
* @title InsertSort
* @describe 直接插入排序
* @author 张富昌
* @date 2016年10月1日下午5:12:41
*/
public class InsertSort_1 {   public static void main(String[] args) {
    // 声明整型数组
    int[] array = new int[10];
    // 使用循环和随机数初始化数组
    for (int i = 0; i < array.length; i++) {
      array[i] = (int) Math.round(Math.random() * 100);
    }
    System.out.println("原始数组为:");
    System.out.println(Arrays.toString(array));
    System.out.println("--------------------------------------");
    array = insertSort(array);
    System.out.println("--------------------------------------");
    System.out.println("排序后的数组为:");
    System.out.println(Arrays.toString(array));
  }   /**
  *
  * 功能:插入排序的基本思想是,将元素逐个添加到已经排序好的数组中去,同时要求,插入的元素必须在正确的位置,这样原来排序好的数组是仍然有序的。
  *
  * 参数:int[] array
  *
  * 返回类型:int[]
  */
  public static int[] insertSort(int[] array) {
    // 使用临时数组,替代原始数组
    int[] arr = array;
    // 临时变量
    int temp;
    for (int i = 1; i < arr.length; i++) {       System.out.println("第 " + i + "趟");
      for (int j = i; j >= 1; j--) {
        // 较小的数排在前面
        if (arr[j] < arr[j - 1]) {
          temp = arr[j];
          arr[j] = arr[j - 1];
          arr[j - 1] = temp;
        } else {
          break;
        }
      }
      System.out.println(Arrays.toString(arr));
    }
    return arr;
  }
}

2、方法二:

 import java.util.Arrays;

 /**
*
* @title InsertSort
* @describe 直接插入排序
* @author 张富昌
* @date 2016年10月1日下午5:12:41
*/
public class InsertSort_2 {   public static void main(String[] args) {
    // 声明整型数组
    int[] array = new int[10];
    // 使用循环和随机数初始化数组
    for (int i = 0; i < array.length; i++) {
      array[i] = (int) Math.round(Math.random() * 100);
    }
    System.out.println(Arrays.toString(array));
    System.out.println("--------------------------------------");
    array = insertSort(array);
    System.out.println("--------------------------------------");
    System.out.println("排序后的数组为:");
    System.out.println(Arrays.toString(array));
  }   /**
  *
  * 功能:插入排序的基本思想是,将元素逐个添加到已经排序好的数组中去,同时要求,插入的元素必须在正确的位置,这样原来排序好的数组是仍然有序的。
  *
  * 参数:int[] array
  *
  * 返回类型:int[]
  */
  public static int[] insertSort(int[] array) {
    // 使用临时数组,替代原始数组
    int[] arr = array;
    int j, temp;
    for (int i = 1; i < arr.length; i++) {
      System.out.println("第 " + (i + 1) + "趟");
      if (arr[i] < arr[i - 1]) {
        temp = arr[i];
        for (j = i - 1; j >= 0 && arr[j] > temp; j--) {
          arr[j + 1] = arr[j];
        }
        arr[j + 1] = temp;
      }
      System.out.println(Arrays.toString(arr));
    }
    return arr;
  }
}

排序算法之直接插入排序Java实现的更多相关文章

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

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

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

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

  3. 常用的排序算法介绍和在JAVA的实现(二)

    一.写随笔的原因:本文接上次的常用的排序算法介绍和在JAVA的实现(一) 二.具体的内容: 3.交换排序 交换排序:通过交换元素之间的位置来实现排序. 交换排序又可细分为:冒泡排序,快速排序 (1)冒 ...

  4. 排序算法之折半插入排序的思想以及Java实现

    1 基本思想 折半插入排序(binary insertion sort)的基本原理与直接插入排序相同,不同之处在于,确定当前记录在前面有序子数组中的位置时,直接插入排序是采用顺序查找的方法,而折半插入 ...

  5. 我的Java开发学习之旅------>Java经典排序算法之二分插入排序

    一.折半插入排序(二分插入排序) 将直接插入排序中寻找A[i]的插入位置的方法改为采用折半比较,即可得到折半插入排序算法.在处理A[i]时,A[0]--A[i-1]已经按关键码值排好序.所谓折半比较, ...

  6. 各种排序算法的分析及java实现

    排序一直以来都是让我很头疼的事,以前上<数据结构>打酱油去了,整个学期下来才勉强能写出个冒泡排序.由于下半年要准备工作了,也知道排序算法的重要性(据说是面试必问的知识点),所以又花了点时间 ...

  7. (转)各种排序算法的分析及java实现

    转自:http://www.cnblogs.com/liuling/p/2013-7-24-01.html 排序一直以来都是让我很头疼的事,以前上<数据结构>打酱油去了,整个学期下来才勉强 ...

  8. 各种排序算法的分析及java实现 分类: B10_计算机基础 2015-02-03 20:09 186人阅读 评论(0) 收藏

    转载自:http://www.cnblogs.com/liuling/p/2013-7-24-01.html 另可参考:http://gengning938.blog.163.com/blog/sta ...

  9. 常用的排序算法介绍和在JAVA的实现(一)

    一.写随笔的原因:排序比较常用,借此文介绍下排序常用的算法及实现,借此来MARK一下,方便以后的复习.(本人总是忘得比较快) 二.具体的内容: 1.插入排序 插入排序:在前面已经排好序的序列中找到合适 ...

随机推荐

  1. Java并发编程(2) AbstractQueuedSynchronizer的设计与实现

    一 前言 上一篇分析AQS的内部结构,其中有介绍AQS是什么,以及它的内部结构的组成,那么今天就来分析下前面说的内部结构在AQS中的具体作用(主要在具体实现中体现). 二 AQS的接口和简单示例 上篇 ...

  2. dropload的使用记录

    这次做一个H5的页面,需要用到上拉加载,下拉刷新的功能,在网上看到ximen写的dropload.js可以满足需求(此处致谢作者),但是用的时候还是踩了一些坑,这里记录下来备忘. 一些小问题:1. m ...

  3. sql_injection之基本get注入

    1.代码篇 <?php error_reporting(0); include("../conn.php"); if(isset($_GET['id'])){ $id=$_G ...

  4. Spring4笔记9--Spring的事务管理(AOP应用的例子)

    Spring的事务管理: 事务原本是数据库中的概念,在 Dao 层.但一般情况下,需要将事务提升到业务层,即 Service 层.这样做是为了能够使用事务的特性来管理具体的业务.   在 Spring ...

  5. Java不为人知的小秘密

    Java中的main方法必须有一个外壳类,而且必须是静态的! Java中的所有函数都属于某个类的方法,所以main方法也不例外,必须放在一个类中才能编译运行. 例如: public class tex ...

  6. 关于bcb调用动态库,contains invalid OMF record, type 0x21 (possibly COFF)问题

    今天用C++Builder6.0 调用三方lib文件时,编译的时候出现如下错误: “contains invalid OMF record, type 0x21 (possibly COFF)” 才知 ...

  7. WGS84转大地2000

    1.创建自定义地理(坐标)变换: 2.选择源坐标系和目标坐标系: 3.自定义地理转换方法,选择COORDINATE_FRAME; 4.选择投影工具: 5.在地理变换处选择刚才自定义变换.

  8. IntelliJ IDEA + Tomcat ;On Upate Action 与 On Frame Deactivation

    On Upate Action 与 On Frame Deactivation  这两个选项的设置,依赖于 项目的部署方式 是war包 还是 exploded ,看下面的gif: 这里实在是太灵活了, ...

  9. linux用户操作

    1.用户种类 Linux具有三种用户: 超级管理员root:具有最高权限,UID=0  GID=0伪用户(System Account):(UID=1~499)普通用户(login-Account): ...

  10. java容器---Comparable & Comparator

    1.接口Comparable<T> API    参数类型:T ---可以与此对象进行比较的那些对象的类型 此接口强行对实现它的每个类的对象进行整体排序.这种排序被称为类的自然排序,类的c ...