插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

其原理我感觉用一张图说明时最好的了

源码

package Sort;
/*** <p>* Description: 插入排序* </p>* @author zhangjunshuai* @version 1.0* Create Date: 2015年4月6日 上午11:12:37* Project Name: ArithMetic** <pre>* Modification History: *             Date                                Author                   Version          Description * -----------------------------------------------------------------------------------------------------------  * LastChange: $Date:2015年4月6日            $      $Author: zhangjunshuai$          $Rev:1.0 $         * </pre>**/
public class Insertion {public static void sort(Comparable[] a){int N = a.length;for(int i=1;i<N;i++){for(int j = i-1;j>=0&&less(a[j],a[j+1]);j--){exch(a,j,j+1);}show(a);}}/*** <p>* 是否小于* </p>* @author zhangjunshuai* @date 2015年4月3日 下午4:14:52* @param v* @param w* @return*/private static boolean less(Comparable v,Comparable w){return v.compareTo(w)<0;}/*** <p>* 交换函数* </p>* @author zhangjunshuai* @date 2015年4月3日 下午4:14:32* @param a* @param i* @param j*/private static void exch(Comparable[] a,int i ,int j){Comparable t = a[i];a[i] = a[j];a[j] = t;}/*** <p>* 打印输出* </p>* @author zhangjunshuai* @date 2015年4月3日 下午4:19:03* @param a*/private static void show(Comparable[] a){for(int i = 0; i < a.length; i++){System.out.print(a[i] + " ");}System.out.println();}public static void main(String[] args) {Integer[] a = {1,3,4,5,6,7,23,13,45,25,56,71};sort(a);/*Character[] b = {'a','b','d','w','e','f','g','y','u','t','q','s','d','l','j','g','g','z'};sort(b);*/}
}

奔走在算法的大路上(一)排序之插入排序相关推荐

  1. 奔走在算法的大路上(一)排序之希尔排序

    希尔排序是插入排序的一种更高效的改进版本.它的作法不是每次一个元素挨一个元素的比较.而是初期选用大跨步(增量较大)间隔比较,使记录跳跃式接近它的排序位置:然后增量缩小:最后增量为 1 ,这样记录移动次 ...

  2. 奔走在算法的大路上(一)排序之归并排序

    归并排序(Merge sort)是创建在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 归并操作 归并操作(merge),也叫归并算法 ...

  3. 奔走在算法的大路上(一)排序之选择排序

    首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换).再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置.如此往复,直到 ...

  4. 十大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.计数排序.桶排序.基数排序的动图与源代码. 目录 关于时间复杂度 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 ...

  5. java冒泡排序_JAVA实现经典排序算法(冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序、快速排序)...

    冒泡排序 依次比较相邻的元素,若发现逆顺序,则交换.小的向前换,大的向后换,本次循环完毕之后再次从头开始扫描,直到某次扫描中没有元素交换,说明每个元素都不比它后面的元素大,至此排序完成. import ...

  6. Python排序算法(一)冒泡排序、选择排序、插入排序

    今天总结一下Python中的排序算法.这篇文章有的排序算法是:冒泡排序.选择排序.插入排序. 冒泡排序 先看一下代码. ''' 冒泡排序 '''def bubble_sort(aList):n = l ...

  7. 排序算法(冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序)

    排序也叫排序算法,排序是将一组数据,依指定的顺序进行排列的过程. 排序的分类: 1)内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序. 2)外部排序:数据量过大,无法全部加载到内存中,需要 ...

  8. 基础排序算法(冒泡排序,选择排序,插入排序)

    最近经常调用api中的排序算法,很少自己写了,有时候也只写写快速排序这些比较快的排序,然而刚开始学排序时用的一些基本的排序算法却有点忘了 正好今天Java老师让我们每个人写个选择排序热热手,趁这个机会 ...

  9. 【完整可运行源码+GIF动画演示】十大经典排序算法系列——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    以前也零零碎碎发过一些排序算法,但总是不系统, 这次彻底的对排序系列做了一个整体的规划, 小伙伴们快快mark哦~ [GIF动画+完整可运行源代码]C++实现 冒泡排序--十大经典排序算法之一 [GI ...

最新文章

  1. Json字符串转二维数组
  2. django session, 分页,数据库学习
  3. 【Linux】35. python脚本重命名各子目录下的图片
  4. micropython socket_Micropython之HTTP-GET方法2
  5. 软件设计思维:软件应该可以增大可以减小
  6. java多线程(一)-Thread类和Runnable接口
  7. verilog中的综合与不可综合
  8. Taro+react开发(29)引入固定地址的方式
  9. linux---基础02
  10. Debian11镜像更新为阿里巴巴开源镜像站镜像,切换root用户,解决用户名不在sudoers文件中此事将被报告,Debian11 文件夹对话框、火狐浏览器、命令终端等没有最大化和最小化
  11. SubRenamer – 字幕批量重命名,自动匹配视频文件与字幕文件[Windows]
  12. powershell一行代码批量修改文件名(附命令详解)
  13. helm安装_安装 helm 包管理工具
  14. oracle rac 距离限制,Oracle Extended Distance Clusters (Oracle 扩展距离集群 - 异地RAC)
  15. 护士如何预防职业病:下肢静脉曲张-健康小常识
  16. 帆软控件焦点事件设置可用性
  17. 深入浅出23种设计模式(最全面)
  18. SoapUI中文乱码
  19. OpenV2X开源社区亮相全球边缘计算大会
  20. 微信小程序如何跳转视频号直播间

热门文章

  1. 搜狗快速收录之推送接口
  2. 360和QQ掐架,你支持谁?
  3. 港科资讯 | 香港科大(广州)-思谋科技联合实验室正式揭牌成立
  4. 审稿人:如何写好一篇学术论文?!
  5. GlusterFS存储
  6. 在局域网对数据库SQL Server和文件备份的方法
  7. 关于家庭中只装一个热水器,要求满足的条件是节约用水的方案
  8. 生产制造追溯系统-在线打印
  9. 高品质充电宝推荐,好的充电宝盘点
  10. 为什么零基础转“码”首选软件测试