排序算法之直接插入排序

舞蹈演示排序:

冒泡排序: 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. 【C++】数组-整数从大到小排序

    1.实现过程 定义整型数组src,长度为10,初始化为{11,12,47,24,49,69,90,89,18,39}.之后用嵌套for循环比较相邻两个元素的大小,如果前一个元素大于后一个,不做任何操作 ...

  2. Ubuntu下 git 服务器的搭建【转】

    转自:http://www.open-open.com/lib/view/open1391477731082.html 搭建git服务器的4个步骤 1   配置服务器前的准备工作 首先ubuntu系统 ...

  3. cbow&&skipgram详细

    前面:关于层次huffman树和负例采样也要知道的,这里就不详细写了 来源于:https://mp.weixin.qq.com/s?__biz=MzI4MDYzNzg4Mw==&mid=224 ...

  4. 读取文件和输入——read 脚本命令

    Linux之read命令使用 read命令: read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量 1)read后面的变量var可以只有一个,也可以有多个,这时如果输入 ...

  5. 洛谷P2312解方程

    传送门 思路分析 怎么求解呢? 其实我们可以把左边的式子当成一个算式来计算,从1到 $ m $ 枚举,只要结果是0,那么当前枚举到的值就是这个等式的解了.可以通过编写一个 $ bool $ 函数来判断 ...

  6. How to omit h1 title heading in HTML export

    How to omit h1 title heading in HTML export */--> Introduce how to omit h1 title in the exported ...

  7. Linux下的IPC机制

    Linux下的IPC机制 IPC(Inter-Process Communication)是多个进程之间相互沟通的一种方法.在linux下有多种进程间通信的方法. 共享内存 Linux内存共享有多种, ...

  8. WordPress解决优酷、土豆视频移动端观看问题并自适应

    转:https://www.xhsay.com/wp-iframe-handler-youku-tudou.html 虽然WordPress能直接插入优酷.土豆的视频但是无法在移动端观看,于是乎笨笨就 ...

  9. SSIS 学习之旅 FTP文件传输-FTP任务

    这一章主要讲解一下FTP控件. 设计:   通过Demon库的Users表数据生成CSV文件.   生成后的CSV文件抛送到FTP指定目录下. 其他控件的使用这里就不做详细讲解了.大家如果有不懂得可以 ...

  10. 彻底卸载sql2008后重新安装

    彻底卸载sql2008方法 --打开控制面板,在控制面板中卸载所有带sql server的程序. --删除C:\Program Files\Microsoft SQL Server这整个文件夹, -- ...