java中一文带你读懂的希尔排序

  介绍

这期内容当中小编将会给大家带来有关一文带你读懂java中的希尔排序,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

<强>希尔排序:强通过比较相距一定间隔的元素来工作,各趟比较所用的距离(增量)随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。是插入排序的一种,是针对直接插入排序算法的改进。

<强>算法思想:先将要排序的序列按某个增量d分成若干个子序列,对每个子序列中全部元素分别进行直接插入排序,然后再用一个较小的增量对它进行分组,在每组中再进行排序。当增量减到1时,整个要排序的数被分成一组,排序完成。注意:增量的取值——一般的初次取序列的一半为增量,以后每次减半,直到增量为1 .

算法实现代码如下:

包exp_sort;
  公开课ShellSort {
  公共静态孔隙shell (int[]数组){
  int j;
  int平均;//设置增量的值
  (平均=数组。长度/2;平均比;0;/=2){//平均步长
  for (int i=平均;我& lt;array.length;我+ +){//子序列进行直接插入排序
  int temp=array[我];
  (j=我;j祝辞=平均,,临时& lt;数组(j -平均);j -=平均){
  array [j]=[j -平均]数组;
  }
  array [j]=temp;
  }
  }
  for (int i=0;我& lt;array.length;我+ +){
  system . out。print (array[我]+“;“);
  }
  System.out.println (“\ n");
  }
  公共静态void main (String [] args) {//TODO自动生成方法存根
  int[]数组={62,35岁,77年,55岁,14岁,35岁,98};
  壳牌(数组);
  }
  }

<>强算法分析:该算法是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快;当元素基本有序了,步长很小,插入排序对于有序的序列效率很高,所以,<强> 强,,由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以壳排序是的。<强> 强。但是比O (N ^ 2)复杂度的算法快得多,并且希尔排序非常容易实现,算法代码短而简单。此外,希尔算法在最坏的情况下和平均情况下执行效率相差不是很多,与此同时快速排序在最坏的情况下执行的效率会非常差。

上述就是小编为大家分享的一文带你读懂java中的希尔排序了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

java中一文带你读懂的希尔排序