算法说明:

先是拿语言进行一下描述:

假如是做降序排序,那么从头开始扫描每个数字,使每个数字与它前面的若干数字进行比较,直接找到小于当前数字a(当前数字以a代替)的数字b(小于a的数字以b代替)。 然后将数字a插入到数学b的位置。将数字b到数字a前一位的数字向后移动一位。 至此,排序结束。

语言表述其实懂这个算法的人能会懂,不懂这个算法的人不太容易看懂,所以还是以例子做一下说明:

例如有一个数组int[] arrayData = { 5, 9, 6, 7, 4, 1, 2, 3 ,8},一共9个元素。
假设是降序排序。
先扫描第二个数,让它与它前面的数进行比较,这时前两个数是{5,9},9大于5,那么把9插入放到5的位置即arrayData[0],把5后移放到arrayData[1]
再扫描第三个数,这时因为前面排序所以前三个数就变成了{9,5,6},拿6先与前面的5比较,大于5,那么再往前扫描,与9比较,发现小于9,那么我们将6插入放到5的位置即arrayData[1],将5后移到arrayData[2]。
再扫描第四个数,这时前四个数就变成了{9,6,5,7}, 将7向前扫描进行比较,最终将7插入放到6的位置即arrayData[1],然后6后移放到arrayData[2],5后移放到arrayData[3]
以此类推,最后得出结果。

算法复杂度:

O(n2)

空间复杂度:

O(1)

代码:

使用语言:Java

/** 插入排序*/
public class InsertionSorting {public static void main(String[] args) {int[] arrayData = { 5, 9, 6, 7, 4, 1, 2, 3, 8 };InsertionSortingMethod(arrayData);for (int integer : arrayData) {System.out.print(integer);System.out.print(" ");}}public static void InsertionSortingMethod(int[] arrayData){int temp;int index;for (int i = 1; i < arrayData.length; i++) {temp = arrayData[i];index = i - 1;while (index >= 0 && arrayData[index] < temp) {arrayData[index + 1] = arrayData[index];index--;}arrayData[index + 1] = temp;}}
}

  

结果:

9 8 7 6 5 4 3 2 1

论证算法复杂度:因为是双层循环,所以最坏算法复杂度是O(n2)。

论证空间复杂度:因为作为临时空间进行数据交换的是几个常量,所以空间复杂度是O(1)

转载于:https://www.cnblogs.com/hark0623/p/4330303.html

Hark的数据结构与算法练习之插入排序相关推荐

  1. Hark的数据结构与算法练习之若领图排序ProxymapSort

    算法说明 若领图排序是分布排序的一种. 个人理解,若领图排序算是桶排序+计数排序的变异版,桶排序计数排序理解了,那么若领图排序理解起来就会比较容易.区别其实就是存储中间值的方式做了调整-- 话说,这个 ...

  2. Hark的数据结构与算法练习之图书馆排序

    算法说明 图书馆排序是插入排序的变种,典型的以空间换时间的一种方法.我个人感觉这种思路可以学习借鉴,但直接使用的场景应该不大. 我们知道,真正的插入排序通常往前边插入元素后,我们要把后边所有的元素后移 ...

  3. Hark的数据结构与算法练习之希尔排序

    算法说明 希尔排序是插入排序的优化版. 插入排序的最坏时间复杂度是O(n2),但如果要排序的数组是一个几乎有序的数列,那么会降低有效的减低时间复杂度. 希尔排序的目的就是通过一个increment(增 ...

  4. 数据结构与算法之三直接插入排序

    直接插入排序的基本思想是指定输入数据的个数,从键盘输入给数组a[],从数组中第2个数a[1]与第1个数a[0]开始比较起,如果第2个数a[1]比第1个数a[0]小,则把第2个数a[1]赋给一个临时变量 ...

  5. Hark的数据结构与算法练习之珠排序

    ---恢复内容开始--- 算法说明 珠排序是分布排序的一种. 说实在的,这个排序看起来特别的巧妙,同时也特别好理解,不过不太容易写成代码,哈哈. 这里其实分析的特别好了,我就不画蛇添足啦.  大家看一 ...

  6. Hark的数据结构与算法练习之锦标赛排序

    算法说明 锦标赛排序是选择排序的一种. 实际上堆排序是锦标赛排序的优化版本,它们时间复杂度都是O(nlog2n),不同之处是堆排序的空间复杂度(O(1))远远低于锦标赛的空间复杂度(O(2n-1)) ...

  7. Hark的数据结构与算法练习之圈排序

    算法说明 圈排序是选择排序的一种.其实感觉和快排有一点点像,但根本不同之处就是丫的移动的是当前数字,而不像快排一样移动的是其它数字.根据比较移动到不需要移动时,就代表一圈结束.最终要进行n-1圈的比较 ...

  8. Hark的数据结构与算法练习之耐心排序

    算法说明 耐心排序是插入排序的一种,至少wikipedia是这么分的. 话说我明白这个算法的实现思路了,但是不明白这么做的意义何在? 如果明白的朋友帮忙留个言说一下,以后如果我明白的话,我会来修改这个 ...

  9. Hark的数据结构与算法练习之基数排序

    算法说明 基数排序是基于计数排序的,所以看这个之前要先看一下计数排序对于理解基数排序是很有帮助的(发现计数和基数的音节几乎一致啊).这个我有写,请点击. OK,现在你肯定已经熟悉了计数排序,那么我就来 ...

最新文章

  1. 自动化监控--zabbix安装和配置详解
  2. vue post请求后台django接口Forbidden (CSRF token missing or incorrect.)
  3. SNF快速开发平台2019-权限管理模型简介-权限都在这里
  4. 64. Minimum Path Sum
  5. idea启动tomcat时报错:Error during artifact deployment. See server log for details.
  6. Android 代码实现查看SQLite数据库中的表
  7. 【转】4.SharePoint服务器端对象模型 之 使用CAML进行数据查询
  8. CSS属性(display)
  9. 关于chrome不能设置小于12px字体的问题
  10. ISA-95/B2MML教程 : 从用例到XML消息的整合实践
  11. Scheduled里面报错No thread-bound request found
  12. glTF-Transform处理gltf模型
  13. 计算机子网掩码作用,什么是子网掩码 子网掩码的作用是什么?
  14. 鸿蒙系统全球发布,鸿蒙系统正式发布,全球瞩目!
  15. 示波器如何设置XY模式
  16. 笔的图片 html,笔的素描画图片
  17. 数字图像处理(1)——绪论
  18. 四种解决Vue中重复点击相同路由控制台报错问题( Avoided redundant navigation to current location)
  19. 基于形状匹配的螺丝识别(完整代码)
  20. sqlalchemy 系列教程五-Session和scopedsession

热门文章

  1. android svg图片使用
  2. Mohican_4/22 结构体 typedef 枚举 联合 位段 内存对齐
  3. android 虚拟键 高度,Android获取虚拟按键的高度(适配全面屏)
  4. 快速构建栅格地图-MatLab
  5. 时分秒表达式java_java 时分秒正则表达式
  6. 你还在以为打马赛克就安全了吗?AI消除马赛克,GitHub开源项目上线三天收获近7000星
  7. HCL华三模拟器静态路由实验
  8. 使用JqueryEasyUI进行页面布局
  9. JScript 06 根据成绩平均分划分等级
  10. Codeforces1144C(C题)Two Shuffled Sequences