数据结构与算法——希尔排序(Java实现)

来源:互联网 发布:centos 升级python 编辑:程序博客网 时间:2024/06/01 16:16
算法背景
 * 对于大规模乱序数组,插入排序很慢;因为它只能交换相邻元素
 * ,因此元素只能从数组的一端一点一点地移动到另一端。
 * 希尔排序为了加快速度,简单滴改进了插入排序,交换不相邻的
 * 元素对数组的局部进行排序,并最终用插入排序将局部有序的数组
 * 排序





希尔排序思想

 * 使数组中任意间隔为H的元素都是有序的,换句话说,一个H有序数
 * 组就是H个相互独立的有序数组编织在一起组成的一个数组

public class sell_sort{
   public static void sort(Comparable[] a)
   {
  //将数组升序排列
  int N=a.length;
  int H=1;
  while(H<N/3) H=3*H+1;
  while(H>=1)
  {
  //将数组变为H有序
  for(int i=H;i<N;i++)
  {
  //将a[i]插到a[i-H],a[i-2H],a[i-3H]...之间
  for(int j=i;j>=H&&(a[j].compareTo(a[j-H])<0);j-=H)
  {
  Comparable t=a[j];
  a[j]=a[j-H];
  a[j-H]=t;   
  }
  H=H/3;
  }
  }
   }
}


//上述算法在最坏情况下的比较次数和N^(3/2)正相关
0 0