算法背景:
* 对于大规模乱序数组,插入排序很慢;因为它只能交换相邻元素
* ,因此元素只能从数组的一端一点一点地移动到另一端。
* 希尔排序为了加快速度,简单滴改进了插入排序,交换不相邻的
* 元素对数组的局部进行排序,并最终用插入排序将局部有序的数组
* 排序
希尔排序思想
* 使数组中任意间隔为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)正相关
数据结构与算法——希尔排序(Java实现)
于 2022-08-28 11:52:44 首次发布