几种常见的排序算法(插入排序,希尔排序,归并排序和快速排序)——希尔排序
来源:互联网 发布:格兰杰詹姆斯数据 编辑:程序博客网 时间:2024/05/01 17:01
希尔排序是对插入排序的改进版本,在对于大型的数组来说,插入排序的速度很慢,因为每次只能交换两个相邻的元素,因此元素只能一点一点地从数组的一端移动到另一端,如果最小的元素刚好在数组的最后一位,就需要进行n-1次移动,在最坏的情况下时间复杂度为O(n²),希尔排序为了加快插入排序简单的改进了一下插入排序,交换不相邻的元素而对数组的局部进行排序,最终用插入排序将局部有序的数组排序。
static void exchange(int[] a,int i,int j) {int temp;temp=a[i];a[i]=a[j];a[j]=temp;}public static void main(String []args){int[] a= {1,-1,0,5,4,3};int N=a.length;int h=1;while(h<N/3) h=3*h+1;while(h>=1) {for(int i=h;i<a.length-1;i++)for(int j=i;j>0&&a[j]<a[j-h];j-=h)exchange(a,j,j-h);h/=3;}for(int i=0;i<a.length-1;i++)System.out.println(a[i]+" ");}
前面一篇文章已经说到,插入排序对于倒置数量较少的数组或者说是部分有序的数组来说,效率很高,希尔排序减少了倒置,为插入排序的实现提供了便利。与插入排序相比,希尔排序的效率要高了很多,并且数组越大,优势越大。
阅读全文
0 0
- 几种常见的排序算法(插入排序,希尔排序,归并排序和快速排序)——希尔排序
- 几种常见的排序算法(插入排序,希尔排序,归并排序和快速排序),算法分析以及改进
- 常用的排序算法:插入排序,希尔排序,冒泡排序,选择排序,快速排序,归并排序
- 常见比较排序算法的实现(归并排序、快速排序、堆排序、选择排序、插入排序、希尔排序)
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 插入排序、希尔排序、堆排序、归并排序、快速排序
- 排序(插入排序,希尔排序,归并排序,快速排序)
- 基本的排序算法:冒泡排序、插入排序、希尔排序、选择排序、归并排序、快速排序、堆排序
- 几种常见的排序算法,选择排序,冒泡排序,希尔排序,堆排序,快速排序,归并排序,基数排序的比较
- 七种排序算法,包括:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, 冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- 比较排序总结——直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序
- 排序:插入,希尔,堆,快速,归并排序
- 常见排序集合(冒泡排序,选择排序,直接插入排序,二分插入排序,快速排序,希尔排序,归并排序)
- 归并排序,堆排序,基数排序,希尔排序,快速排序,交换排序,选择排序和插入排序的总结和比较
- 算法<改进的冒泡排序、直接插入排序、折半插入排序、希尔排序、快速排序、归并排序>
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序
- 网络请求以及方法优化Jersey
- Android中完全退出应用程序
- 机器学习中的范数规则化之(一)L0、L1与L2范数
- Hive查询
- 数据科学中心——首席数据科学家
- 几种常见的排序算法(插入排序,希尔排序,归并排序和快速排序)——希尔排序
- 产品设计师 VS UX设计师:你更想成为哪一个?
- C#连接Oracle服务器(非本地Oracle数据库)
- centos7 安装vsftpd和配置虚拟用户访问及权限分配
- LeetCode-61-Rotate List 链表水题
- ReactNative环信接入
- jquery中prop()方法
- 无向网的深度优先遍历
- 根据枚举类型值获取改值的描述信息