排序算法之直接插入排序

舞蹈演示排序:

冒泡排序: 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、方法一:

  1. import java.util.Arrays;
  2.  
  3. /**
  4. *
  5. * @title InsertSort
  6. * @describe 直接插入排序
  7. * @author 张富昌
  8. * @date 2016年10月1日下午5:12:41
  9. */
  10. public class InsertSort_1 {
  11.  
  12.   public static void main(String[] args) {
  13.     // 声明整型数组
  14.     int[] array = new int[10];
  15.     // 使用循环和随机数初始化数组
  16.     for (int i = 0; i < array.length; i++) {
  17.       array[i] = (int) Math.round(Math.random() * 100);
  18.     }
  19.     System.out.println("原始数组为:");
  20.     System.out.println(Arrays.toString(array));
  21.     System.out.println("--------------------------------------");
  22.     array = insertSort(array);
  23.     System.out.println("--------------------------------------");
  24.     System.out.println("排序后的数组为:");
  25.     System.out.println(Arrays.toString(array));
  26.   }
  27.  
  28.   /**
  29.   *
  30.   * 功能:插入排序的基本思想是,将元素逐个添加到已经排序好的数组中去,同时要求,插入的元素必须在正确的位置,这样原来排序好的数组是仍然有序的。
  31.   *
  32.   * 参数:int[] array
  33.   *
  34.   * 返回类型:int[]
  35.   */
  36.   public static int[] insertSort(int[] array) {
  37.     // 使用临时数组,替代原始数组
  38.     int[] arr = array;
  39.     // 临时变量
  40.     int temp;
  41.     for (int i = 1; i < arr.length; i++) {
  42.  
  43.       System.out.println("第 " + i + "趟");
  44.       for (int j = i; j >= 1; j--) {
  45.         // 较小的数排在前面
  46.         if (arr[j] < arr[j - 1]) {
  47.           temp = arr[j];
  48.           arr[j] = arr[j - 1];
  49.           arr[j - 1] = temp;
  50.         } else {
  51.           break;
  52.         }
  53.       }
  54.       System.out.println(Arrays.toString(arr));
  55.     }
  56.     return arr;
  57.   }
  58. }

2、方法二:

  1. import java.util.Arrays;
  2.  
  3. /**
  4. *
  5. * @title InsertSort
  6. * @describe 直接插入排序
  7. * @author 张富昌
  8. * @date 2016年10月1日下午5:12:41
  9. */
  10. public class InsertSort_2 {
  11.  
  12.   public static void main(String[] args) {
  13.     // 声明整型数组
  14.     int[] array = new int[10];
  15.     // 使用循环和随机数初始化数组
  16.     for (int i = 0; i < array.length; i++) {
  17.       array[i] = (int) Math.round(Math.random() * 100);
  18.     }
  19.     System.out.println(Arrays.toString(array));
  20.     System.out.println("--------------------------------------");
  21.     array = insertSort(array);
  22.     System.out.println("--------------------------------------");
  23.     System.out.println("排序后的数组为:");
  24.     System.out.println(Arrays.toString(array));
  25.   }
  26.  
  27.   /**
  28.   *
  29.   * 功能:插入排序的基本思想是,将元素逐个添加到已经排序好的数组中去,同时要求,插入的元素必须在正确的位置,这样原来排序好的数组是仍然有序的。
  30.   *
  31.   * 参数:int[] array
  32.   *
  33.   * 返回类型:int[]
  34.   */
  35.   public static int[] insertSort(int[] array) {
  36.     // 使用临时数组,替代原始数组
  37.     int[] arr = array;
  38.     int j, temp;
  39.     for (int i = 1; i < arr.length; i++) {
  40.       System.out.println("第 " + (i + 1) + "趟");
  41.       if (arr[i] < arr[i - 1]) {
  42.         temp = arr[i];
  43.         for (j = i - 1; j >= 0 && arr[j] > temp; j--) {
  44.           arr[j + 1] = arr[j];
  45.         }
  46.         arr[j + 1] = temp;
  47.       }
  48.       System.out.println(Arrays.toString(arr));
  49.     }
  50.     return arr;
  51.   }
  52. }

排序算法之直接插入排序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. Python练习-函数版-锁定三次登陆失败的用户

    代码如下: # 编辑者:闫龙 if __name__ == '__main__': import UserLoginFuncation LoclCount=[]; while True: UserNa ...

  2. PHP编程效率的20个要点-[转]

    用 单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则 不会,注意:只有echo能这么做,它是一种可以把多个字符 串当作参数的“函数”(译注:PHP手 ...

  3. asp.net 调用post方法并获取返回值

    /// <summary>        /// http协议 post数据 接受返回结果        /// </summary>        /// <param ...

  4. spfa+floyed+最长路+差分约束系统(F - XYZZY POJ - 1932)(题目起这么长感觉有点慌--)

    题目链接:https://cn.vjudge.net/contest/276233#problem/F 题目大意:给你n个房子能到达的地方,然后每进入一个房子,会消耗一定的生命值(有可能是负),问你一 ...

  5. PCA主成分分析理解

    一.理论概述 1)问题引出 先看如下几张图: 从上述图中可以看出,如果将3个图的数据点投影到x1轴上,图1的数据离散度最高,图3其次,图2最小.数据离散性越大,代表数据在所投影的维度上具有越高的区分度 ...

  6. 20165230 2017-2018-2 《Java程序设计》第8周学习总结

    20165230 2017-2018-2 <Java程序设计>第8周学习总结 教材学习内容总结 第十二章 java多线程机制 一个进程在其执行过程中,可产生多个线程.线程是比进程更小的执行 ...

  7. TreeCollection2

    Tree Collection 2 Table of Contents Introduction Structure Interfaces Data Node structure Tree struc ...

  8. grpc 实现微服务生态笔记

    微服务的发展可谓是一波三折,一代一代经历和N多技术成果,grpc只是其中一个,因为其东家是google,明显比较稳定.加上其强大的文档和技术支持和跨平台的支持,在企业级应用上有很大的可信任感,所以也有 ...

  9. win7 64位mysql安装及navicat 解压版

    教程:http://jingyan.baidu.com/article/f3ad7d0ffc061a09c3345bf0.html Mysql修改设置root密码的命令及方法:http://jingy ...

  10. Golang新起航!(编译安装go)

    别废话,直接上~ linux下安装GO1.8 1.下载go的版本 国内地址源:https://dl.gocn.io/ 在这里选择源码的方式安装,在安装go的时候是需要gcc的,所以你的linux系统需 ...