希尔排序

希尔排序算法实际上是一种特殊的插入排序,由DL.Shell于1959年提出而得名。

算法思想:希尔排序使数组中任意间隔为h的元素都是有序的,这些数组称为h有序数组,对于每个h,按插入排序进行排序。

算法实现:

public static void sort(int [] array){int h=1;while(h<array.length/3)h=3*h+1;while(h>=1){for(int i=h;i<array.length;i++){for(int j=i;j>=h&&array[j]<array[j-h];j=j-h){int temp=array[j];array[j]=array[j-h];array[j-h]=temp;}}h=h/3;}

分析:

然后执行h=h/3=1,即按插入排序对整个数组进行排序。此时倒置的元素很少,插入排序的效率大大提高。

归并排序

算法思想:基于分治的思想,将待排序的数组(递归的)分成两半,对这两部分分别排序,然后将结果归并起来。

算法实现(自顶向下递归实现):

public static int [] aux;public static void merge(int []array,int lo,int mid,int hi){//归并操作int i=lo,j=mid+1;for(int k=lo;k<=hi;k++){aux[k]=array[k];}for(int k=lo;k<=hi;k++){if(i>mid) array[k]=aux[j++];else if(j>hi) array[k]=aux[i++];else if(aux[j]<aux[i]) array[k]=aux[j++];else array[k]=aux[i++];}}public static void sort(int []array){aux=new int[array.length];sort(array,0,array.length-1);}public static void sort(int []array,int lo,int hi){if(hi<=lo) return ;int mid=lo+(hi-lo)/2;sort(array,lo,mid);sort(array,mid+1,hi);merge(array,lo,mid,hi);}

自底向上:

public static int [] aux;public static void merge(int []array,int lo,int mid,int hi){int i=lo,j=mid+1;for(int k=lo;k<=hi;k++){aux[k]=array[k];}for(int k=lo;k<=hi;k++){if(i>mid) array[k]=aux[j++];else if(j>hi) array[k]=aux[i++];else if(aux[j]<aux[i]) array[k]=aux[j++];else array[k]=aux[i++];}}public static void sort(int []array){aux=new int[array.length];for(int i=1;i<array.length;i=2*i){//两两进行合并for(int lo=0;lo<array.length-i;lo=lo+2*i){merge(array,lo,lo+i-1,Math.min(lo+2*i-1, array.length-1));}}}

时间复杂度为 Nlg(N)

转载于:https://www.cnblogs.com/coderising/p/5700831.html

希尔排序和归并排序(java实现)相关推荐

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

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

  2. 掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等)...

    掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等). 数组高级以及Arrays(掌握) 排序方法 空间复杂度 时间复杂度 稳定性 插 入 排 序 ...

  3. Python排序算法(二) 快速排序、希尔排序、归并排序

    这篇文章有的排序算法是:快速排序.希尔排序.归并排序. 快速排序 ''' 快速排序 '''def quick_sort(aList, first, last):if first >= last: ...

  4. 希尔排序和归并排序以及快速排序

    高级排序 高级排序 高级排序 1.希尔排序 2.归并排序 3.快速排序 4.快速排序和归并排序的区别 5.几种快速排序的测试 6.排序的稳定性 所谓高级排序就是在比时间复杂度上比简单排序更快一点,尤其 ...

  5. 【数据结构与算法】高级排序(希尔排序、归并排序、快速排序)完整思路,并用代码封装排序函数

    本系列文章[数据结构与算法]所有完整代码已上传 github,想要完整代码的小伙伴可以直接去那获取,可以的话欢迎点个Star哦~下面放上跳转链接 https://github.com/Lpyexplo ...

  6. 十大经典排序算法(图解与代码)——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序(Python and Java)

    排序 重新排列表中的元素,使表中的元素按照关键字递增或者递减 内部排序: 指在排序期间,元素全部存放在内存中的排序 外部排序: 指在排序期间元素无法全部同时存放在内存中,必须在排序的过程中根据要求不断 ...

  7. 选择排序、冒泡排序、插入排序、快速排序、希尔排序、归并排序、堆排序和希尔排序的java实现比较

    几种排序实现代码 package com.delicacy.oatmeal.test.suanfa.sort;import java.util.Arrays; import java.util.Ran ...

  8. ❤️万字总结八大排序:冒泡排序,选择排序,插入排序,堆排序,希尔排序,归并排序,计数排序❤️

    目录 主要排序算法性能对比 冒泡排序 选择排序 插入排序 堆排序 希尔排序 快速排序 Hoare版 挖坑版 前后指针法 归并排序 计数排序 海量数据的排序问题 主要排序算法性能对比 冒泡排序 各位同学 ...

  9. 在路上---学习篇(一)Python 数据结构和算法 (4) --希尔排序、归并排序

    独白: 希尔排序是经过优化的插入排序算法,之前所学的排序在空间上都是使用列表本身.而归并排序是利用增加新的空间,来换取时间复杂度的减少.这俩者理念完全不一样,注定造成的所消耗的时间不同以及空间上的不同 ...

最新文章

  1. ajax ie7没有权限,jquery ajax 在ie7不能正常使用
  2. 独家 | 一文读懂神经网络(附解读案例)
  3. Merge into 详细介绍
  4. linux_tomcat
  5. java继承与初始化
  6. Oracle 11.2.0.2新特性——用户重命名(Rename User)
  7. 【.NET Core项目实战-统一认证平台】第三章 网关篇-数据库存储配置(1)
  8. 一张图了解.Net Core和.NetFx和.Net Standard和Xamarin关系
  9. php error_get_last(),PHP捕获异常register_shutdown_function和error_get_last的使用
  10. linux扫盲之CPU模式
  11. 国内成品油价近期历次调整一览
  12. linux脚本怎么发送到桌面,如何在Linux上使用Zenity创建简单的图形Shell脚本
  13. (ISC)² 新增两家 CISSP 官方授权培训合作伙伴
  14. Redis集群原理和总结
  15. img pdf 展示_vue中如何实现pdf文件预览的方法
  16. html控制萤石云摄像头转动,怎么控制云台转动 ?
  17. gii无法访问 yii2_Gii的CURD生成无法访问?
  18. 尚硅谷springboot笔记
  19. Web Services 简介
  20. collections库

热门文章

  1. python定时启动代码_python每天定时运行某程序代码
  2. python类的继承代码_python--类的继承
  3. Xftp报no matching outgoing encryption algorithm found
  4. IntelliJ IDEA中使用sonar插件,忽略规则和重启规则
  5. UVa815 - Flooded!
  6. JavaScript浏览器window对象→简介、消息对话框、计时器、history、打开新窗口及模式showModalDialog、location、navigator、screen、窗口位置尺寸
  7. linux 编程 调度,Linux的进程线程及调度
  8. 各种手机处理器排行榜_11月新机性能排行榜:荣耀V30第四,vivo S5上榜
  9. 计算机组成原理—基本概念(不基础的部分)
  10. 网络地址转换协议NAT详解