插入排序

想象着你的左手拿着一手好牌[1,1,1,2,6,6,6,9,9],此时你从桌面上又抽出一张牌[1],你将抽出的牌,从又往左,依次与左手的牌进行比较(只以数字进行对比),当抽出的牌第一次不再大于手中的牌,你将抽出的牌插入此牌的相邻右边,入[1,1,,,2,6,6,6,9,9],绿色为从右往左第一个抽出牌不再大的牌,红色为抽出的牌,这样你就回发现,虽然左手中的牌不断增加,但都将持续保持有序状态

插入排序同上方抽牌的例子相似,她将一个待排序数列分为左右两部分,并令左半部分为有序,右半部分为无序,每次从无序数列中取出一个数(无序部分最左端的一个数),并将其插入到有序数列中的合适位置(待排序数从右往左比较有序部分的元素,直到待排序数遇到第一个她不再大于的元素,此时待排序数将安置在此元素的右方),最开始,对于有序部分,其元素个数为0个,并在新元素的插入下不断增多,直到整个待排序数列有序

插入排序 - 方式一

方法将待排序数持续向左移动,直到待排序数不再大于前一个数

见图

上代码

     public static void insertSort(int[] arr) {

         for (int i = 0; i < arr.length; i++) {
for (int j = i; j > 0; j--) {
if(arr[j]<arr[j-1]) {
int tmp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=tmp;
}
}
}
}

测试

    public static void main(String[] args) {

        Sort.insertSort(new int[] {6,10,6,8,6,8,12,15,9,6,7});

    }

插入排序 - 方式二

思想与上面的相同,只是方法避免了重复多次的相邻数据的交换,只在最后一步将待排序树插入到合适位置

上图

上代码

     public static void insertSort(int[] arr) {

         for (int i = 0; i < arr.length; i++) {
int j = i;
int tmp=arr[i];
for (; j > 0 && tmp<arr[j-1]; j--) {
arr[j]=arr[j-1];
}
arr[j]=tmp;
}
}

测试

    public static void main(String[] args) {

        Sort.insertSort(new int[] {6,10,6,8,6,8,12,15,9,6,7});

    }


如果有地方写的错误,或者有什么疑问与建议,欢迎大家提出来 愿与大家一同进步

最新文章

  1. label用js,jquery取值赋值,以及怎么在后台取值
  2. hadoop常见问题汇集
  3. 【部分原创】标准C语言的优先级、结合性、求值顺序、未定义行为和非确定行为浅析
  4. windows下基于sublime text3的nodejs环境搭建
  5. intval()和(int)转换使用与区别
  6. Java 按值传递
  7. 对象作为返回值类型&amp;&amp;链式编程
  8. (大数据工程师学习路径)第二步 Vim编辑器----高级功能入门
  9. python常用的数据结构运行效率分析
  10. mysql数据库出现2003-Can&#39;t connect to MySQL server on &#39;localhost&#39; (10061)的解决方法
  11. sql servel 报错:将 expression 转换为数据类型 int 时出现算术溢出错误。
  12. 利用ELK分析Nginx日志生产实战(高清多图)
  13. php获取脚本执行的参数
  14. 【数据结构】红黑树与跳表-(SortSet)-(TreeMap)-(TreeSet)
  15. EE4218 / EE4216 Faculty of Science and Engineering
  16. Java 基础【19】代理
  17. H5页面关于android软键盘弹出顶起底部元素的解决方案
  18. SCU 4438:Censor
  19. Django缓存配置和使用
  20. git入门篇

热门文章

  1. SQL Server 中字段的精度问题
  2. python类方法以及类调用实例方法的理解
  3. 001 Lua相关链接
  4. PMP知识点(六)&mdash;&mdash;项目经理权利类型
  5. 在Synology群晖上运行Frp客户端
  6. python学习07
  7. 【bzoj 4449】[Neerc2015]Distance on Triangulation
  8. 理解 Linux 的硬链接与软链接【转】
  9. python中的operator.itemgetter函数
  10. 帆软报表(finereport)实现自动滚屏效果